Nginx 代理的应用程序间歇性 502 的故障排查总结

一、服务架构
  • 服务应用和网络结构示意图

                       +-------+  HTTP   +----------+
                       |       | ------> | Server A |
                       |       |         +----------+
    +--------+  HTTP   |       |  HTTP   +----------+
    | Client | ------> | Nginx | ------> | Server B |
    +--------+         |       |         +----------+
                       |       |  HTTP   +----------+
                       |       | ------> | Server C |
                       +-------+         +----------+
    
二、故障描述

Nginx 所代理的后端应用程序间歇性持续出现 HTTP 502 的异常。并且是一瞬间后端多个独立部署的应用全部出现 HTTP 502 的错误

# 一瞬间Nginx检测不到任何存活的后端服务才会出现的 Nginx 错误日志
no live upstreams while connecting to upstream ...... HTTP/1.0
三、故障分析
  1. 网络抖动原因导致异常

  2. Nginx 的配置文件是否有错误,导致 Nginx 转发异常

  3. 应用程序在处理某一个或者某一类请求的时候出现系统错误,导致请求阻塞,后续请求无法连接

  4. 检查后端独立应用负载压力是否过大,导致应用程序无法处理当前并发的业务?

    [root@rambo ~]# netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
    SYN_RECV 	 1
    ESTABLISHED  656
    FIN_WAIT1 	 4
    TIME_WAIT 	 153429
    
四、故障排除
  1. 故障分析结论一,检测网络是否正常,确保网络正常后是否还出现 HTTP 502 的间歇性异常。

  2. 故障分析结论二,那么我们应该检测 Nginx 的配置,将代理程序设置正确并重启 Nginx 服务。

  3. 故障分析结论三,检查应用程序日志:运行时异常?数据库处理异常?等等导致后续请求阻塞。扩展应用程序的横向部署来提高业务处理能力。

  4. 故障分析结论四,TIME_WAIT 特别多,大量的连接被 SERVER 侧主动关闭,这说明 Nginx -> SERVER 这一步请求并没有 Keep-Alive由于 HTTP1.0 中 Keep-Alive 默认是关闭的,需要在请求头显示加上 Connection: Keep-Alive 才能启用 Keep-Alive。 但是在 HTTP1.1 中,该功能默认是开启的,需要使用 Connection: Close 才会禁用 Keep-Alive目前大部分浏览器使用的是 HTTP 1.1 协议。

    upstream bbbbbb {
          
          
        server 127.0.0.1:8080 max_fails=3 fail_timeout=5s weight=1;
        server 127.0.0.1:8081 max_fails=3 fail_timeout=5s weight=1;
        # 添加 keepalive 配置
        keepalive 256;
    }
    
    location ^~ /aaaaaa/ {
          
          
        # 强制指定使用 HTTP/1.1 协议
        proxy_http_vesrion 1.1;
        # 在请求头显示启用 Keep-Alive
        proxy_set_header Connection "Keep-Alive";
        proxy_pass http://bbbbbbb/;
    }
    

猜你喜欢

转载自blog.csdn.net/Rambo_Yang/article/details/124657296