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

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

文章目录 一、服务架构二、故障描述三、故障分析四、故障排除

一、服务架构

服务应用和网络结构示意图

                   +-------+  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
三、故障分析

网络抖动原因导致异常

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

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

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

[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
四、故障排除

故障分析结论一,检测网络是否正常,确保网络正常后是否还出现 HTTP 502 的间歇性异常。

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

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

故障分析结论四,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/;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/949389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存