排查 Nginx 报 504 Gateway Time-out 的核心思路是:
先确认是 Nginx 的问题,还是后端(PHP / Java / Python / Node 等)处理超时,再分层定位。
tail -f /var/log/nginx/error.log
常见 504 相关日志:
upstream timed out (110: Connection timed out)
upstream prematurely closed connection
说明:
upstream timed out → 后端响应太慢或挂了Connection refused → 后端进程没启动tail -f /var/log/nginx/access.log
你会看到:
IP - - [time] "GET /api/test HTTP/1.1" 504 ...
重点看:
$request_time)1️⃣ 检查 PHP-FPM 是否活着
ps aux | grep php-fpm
2️⃣ 检查 PHP-FPM 错误日志
tail -f /var/log/php-fpm/error.log
3️⃣ 检查 Nginx 中的 fastcgi 超时
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_read_timeout 60;
}
✅ 常见解决:
fastcgi_read_timeout 300;
4️⃣ 检查 PHP 本身超时
max_execution_time = 300
1️⃣ 查看 upstream 超时
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_send_timeout 60;
✅ 可临时加大:
proxy_read_timeout 300;
2️⃣ 后端日志
如果是多层代理:
proxy_pass http://upstream_server;
✅ 所有层都要检查:
proxy_read_timeout| 场景 | 改哪 |
|---|---|
| PHP 慢 | fastcgi_read_timeout |
| Java/Node 慢 | proxy_read_timeout |
| 后端直接挂 | 后端进程 |
| 偶尔 504 | 后端慢 SQL / 阻塞 |
| 高并发 | upstream 连接数 |
error_log /var/log/nginx/error.log debug;
curl -v http://yourdomain.com/api/test
❌ 改了配置没 reload
nginx -t
nginx -s reload
❌ 以为是 Nginx 问题,其实是 数据库慢查询
❌ 防火墙 / 安全组把 upstream IP 拦了
504 基本不是 Nginx 错,而是后端太慢或挂了
如果你愿意,可以贴:
我可以 直接帮你定位到具体参数和配置。