Nginx 反代超时,不是 worker 挂了
排盘有时要连算好几盘,PHP 还没返回,浏览器已经 504。以前我会去看 PHP-FPM 是不是挂了。这次 error.log 写得很清楚:upstream timed out。
三层超时
浏览器、Nginx、PHP 各有各的钟。Nginx 默认 proxy_read_timeout 60s,FPM 的 request_terminate_timeout 如果更长,Nginx 先断开,PHP 还在算,日志对不上。
location /api/ {
proxy_pass http://127.0.0.1:9001;
proxy_connect_timeout 3s;
proxy_send_timeout 60s;
proxy_read_timeout 90s;
}
我把读超时放到 90s,PHP 限在 80s。谁先停,心里有数。真正该做的是把长任务拆出去,接口不要同步硬扛。
顺手改的
proxy_buffering on,小响应少占 worker。- 反代头带上
X-Request-Id,PHP 日志和 access.log 能对上。 - 健康检查别用排盘这种重接口,用一个只查
SELECT 1的 ping。
504 不一定是挂了。经常是前面的人等不及,后面的人还在算。