1. 问题概述与排查思路
在
云WAF后端为7层(应用层)负载均衡时,常见故障包括 502/503/504、响应超时、客户端真实IP丢失、证书/SNI不匹配和健康检查不通过。排查顺序建议:复现问题 → 收集前端/负载均衡/后端日志 → 使用网络命令复现连接 → 验证健康检查配置 → 逐项调整超时/头部/证书/会话保持。下面按步骤给出详细可操作指南。
2. 复现问题与收集证据
步骤:1) 使用 curl 复现:curl -v --header "Host: example.com" https://waf-ip/ 记录状态码与头;2) 如果是超时:curl -v --max-time 30 https://waf-ip/;3) 检查前端WAF日志(云控制台或API导出);4) 在负载均衡器上查看后端健康检查日志和监控指标(健康率、后端延迟、连接数)。保存时间点、请求ID、客户端IP样例。
3. 检查后端应用与负载均衡之间的TCP/SSL层
步骤:1) 从负载均衡管理台查看是否做了TLS终止或TLS透传(passthrough);2) 如果是TLS终止,确认证书链是否完整;用 openssl s_client -connect backend:443 -servername example.com 查看证书;3) 若是透传,确认证书是后端服务呈现;4) 使用 tcpdump 在后端抓包:tcpdump -i eth0 host
and port 443 -w capture.pcap ,随后用 wireshark 分析 SNI、证书 handshake、重传、MSS/MTU 问题。
4. 健康检查(Health Check)不通过的排查与修复
步骤:1) 登录云LB控制台,查看健康检查路径、协议(HTTP/HTTPS/TCP)、期望的返回码(例如 200)与超时/重试次数;2) 本地使用 curl --resolve example.com:80:waf-ip http://example.com/health 模拟;3) 如果返回非预期码,调整后端服务以返回稳定的健康响应(简短、固定、无重定向);4) 若后端需要Host或Auth头,配置健康检查携带该头或使用 TCP 检查;5) 增加超时或降低检测频率以防止波动导致抖动。
5. 502/503/504 常见成因与逐项排查
502(Bad Gateway)通常为后端拒绝或协议不匹配;503(Service Unavailable)可能是后端过载或健康检查失败;504(Gateway Timeout)为后端无响应或超时。排查:1) 查看负载均衡到后端的后端日志与负载均衡访问日志;2) 使用 ss -tnp 或 netstat -plnt 检查后端服务端口是否监听、连接是否被耗尽;3) 检查后端应用线程/进程数、数据库连接池、队列堆积;4) 增加 LB 到后端的超时配置(read timeout、send timeout)测试改善;5) 在后端增加慢请求日志并定位耗时API。
6. 客户端真实IP 丢失与代理协议(Proxy Protocol)/X-Forwarded-For 设置
问题表现为后端日志记录的是负载均衡IP而非真实客户端IP。步骤:1) 确认负载均衡是否支持并开启 Proxy Protocol 或者自动注入 X-Forwarded-* 头;2) 如果启用 Proxy Protocol,需要后端服务或代理(如 Nginx、HAProxy)开启 proxy_protocol 支持;示例 Nginx:listen 80 proxy_protocol; 并在日志格式使用 $proxy_protocol_addr;3) 如果使用 X-Forwarded-For,确保后端日志使用正确头($http_x_forwarded_for)并注意防篡改;4) 测试:curl -v --header "X-Forwarded-For:1.2.3.4" http://waf-ip/ 并查看后端日志。
7. 头部大小、请求体与分块编码引发的问题
大头部或分块传输(chunked)会导致后端或中间代理拒绝连接。步骤:1) 检查负载均衡与后端对 header_max_size、client_body_buffer_size 的限制;2) 使用 curl -v -H "Long-Header: " 测试头部被截断或拒绝情况;3) 对于大文件上传,确认是否走了直连或启用了分片上传;4) 若存在问题,调整后端代理配置(nginx client_header_buffer_size client_max_body_size)或在LB侧放宽限制;5) 处理分块编码相关,确保后端支持 Transfer-Encoding: chunked,或在LB处做掉 chunking。
8. 会话保持(Session Stickiness)与后端池管理
步骤:1) 确认负载均衡是否启用了会话粘滞(基于Cookie、Source IP、或应用层 Session);2) 若后端需要粘滞,开启并配置合理的过期时间;3) 检查后端是否能共享会话(共享缓存或session存储),避免因切换后端造成登录失效;4) 若使用 HTTP Keep-Alive,确认连接池大小不会导致后端连接耗尽,调整 keepalive_timeout 或 LB 的 max connections 配置;5) 通过负载均衡监控观察单个后端连接数是否过高。
9. WAF 策略误杀、限流和规则排查
步骤:1) 检查 WAF 的事件日志,是否因为某些防护规则(SQLi/XSS/速率限制)把合法请求拦截(常见 403 或 406);2) 在 WAF 控制台开启“观察模式”或放行测试某条规则;3) 使用原始请求复现并在 WAF 中查看规则命中详情,逐条禁用或放宽匹配;4) 对于误判多发接口,建议单独放行或基于路径白名单微调;5) 记录被拦截的请求样本以供开发调整请求格式或WAF规则。
10. 问:遇到 504 超时,第一步应该做什么?
答:
第一步是确定超时发生的环节:用 curl 带 --trace-time 或 tcpdump 在 WAF/负载均衡与后端间抓包,观察是否有 TCP 三次握手但没有 HTTP 响应;同时检查负载均衡的后端延迟、超时设置(比如 idle/read timeout)和后端应用慢请求日志。快速解决策略包括适当增加 LB 的后端超时、优化后端接口响应或把慢接口改为异步处理、并临时扩容后端实例。
11. 问:后端证书链错误导致连接失败,如何验证并修复?
答:
使用 openssl s_client -connect backend:443 -servername domain.com 查看证书链是否完整与证书是否被信任(注意 CA、链证书、中间证书顺序)。若链不全,按证书供应商提供的链文件合并(fullchain.pem)并在后端服务器上安装完整链;如果负载均衡做 TLS 终止,需在 LB 上更新证书并确保证书包含正确的 SAN/SNI。完成后用浏览器或 openssl 再次验证。
12. 问:如何定位是 WAF 规则误杀还是后端应用问题?
答:
并行排查:首先在 WAF 控制台临时把相关安全策略切换到“监测/宽松”模式,重试请求看是否恢复;同时直接绕过 WAF(如果可行)向后端发起相同请求,看后端响应是否正常;检查 WAF 的拦截日志(详细规则ID和触发条件)与后端日志请求ID或时间点对比,若在 WAF 就被阻断即为规则误杀,否则为后端应用问题。