一次nginx 502问题排查和解决

问题描述

现象:生产环境50并发压测出现0.01%的错误率,全部为502/Bad Gateway

原因分析

1.通过观察nginx error log发现产生502的原因为"upstream prematurely closed connection while reading response header from upstream",也就是请求期间上游服务器关闭连接导致。

2.分析发现线上nginx upstream配置了keepalive参数,但没有配置proxy_http_version和proxy_set_header Connection,nginx与上游服务器间的连接为短链接。上游服务器处理完请求后会主动关闭连接,但因为nginx upstream设置了keepalive,nginx在收到reponse后仍然会尝试复用此连接,而此时连接已被上游服务器关闭,导致请求失败,出现上述报错。

解决方案

问题解决方式有2种,均已验证生效:

1.仍然使用短链接,去掉upstream中的keepalive参数,保证nginx不再尝试复用,否则在请求密集的时候有概率出现502;

2.使用长连接,加上proxy_http_version 1.1和proxy_set_header Connection ""  这两个配置项,保证服务端在请求处理完成后不主动关闭连接。

为避免出现大量TIME_WAIT,提高资源复用率,目前使用第二种长连接的方式。

你可能感兴趣的:(一次nginx 502问题排查和解决)