可能的原因:
后端服務器的 TCP 隊列滿了,造成 nginx 連接后端時連接被丟棄,隊列滿可能是后端 PHP 程序處理速度慢,或者正在做壓測。
可以觀察后端服務器和 nginx 的 TIME_WAIT 狀態連接數,以及建立的連接數。
nginx 報錯時用 `netstat -s | grep listen` 觀察
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
upstream http_backend {
server 127.0.0.1:8080;
keepalive 256;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
參考:https://www.nginx.com/blog/tuning-nginx/
https://xiezefan.me/2017/09/27/nginx-502-bug-trace/