温馨提示×

nginx日志504错误怎么查

小樊
57
2026-08-29 05:13:26
栏目: 编程语言

排查 Nginx 报 504 Gateway Time-out 的核心思路是:
先确认是 Nginx 的问题,还是后端(PHP / Java / Python / Node 等)处理超时,再分层定位。


一、先看清楚 504 日志在哪

1️⃣ 查看 Nginx 错误日志(最关键)

tail -f /var/log/nginx/error.log

常见 504 相关日志:

upstream timed out (110: Connection timed out)
upstream prematurely closed connection

说明:

  • upstream timed out后端响应太慢或挂了
  • Connection refused后端进程没启动

2️⃣ 查看 Nginx 访问日志

tail -f /var/log/nginx/access.log

你会看到:

IP - - [time] "GET /api/test HTTP/1.1" 504 ...

重点看:

  • 哪个接口
  • 请求耗时(如果有 $request_time

二、按架构快速定位(最常见原因)

✅ 场景 1:Nginx + PHP(最常见)

现象

  • 页面或接口 504
  • PHP 请求执行时间长

排查步骤

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

✅ 场景 2:Nginx + Java / Node / Python

现象

  • 接口偶尔 504
  • 后端接口本身很慢

排查步骤

1️⃣ 查看 upstream 超时

proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_send_timeout 60;

✅ 可临时加大:

proxy_read_timeout 300;

2️⃣ 后端日志

  • Java:GC、线程池、慢 SQL
  • Node:未 await、死循环
  • Python:requests 超时、DB 慢

✅ 场景 3:Nginx → 另一个 Nginx / 网关

如果是多层代理:

proxy_pass http://upstream_server;

✅ 所有层都要检查:

  • proxy_read_timeout
  • 后端是否真的在返回数据

三、快速对照表(哪里改)

场景 改哪
PHP 慢 fastcgi_read_timeout
Java/Node 慢 proxy_read_timeout
后端直接挂 后端进程
偶尔 504 后端慢 SQL / 阻塞
高并发 upstream 连接数

四、精准定位某个接口(推荐)

1️⃣ 打开 Nginx 调试级别(临时)

error_log /var/log/nginx/error.log debug;

2️⃣ 用 curl 复现

curl -v http://yourdomain.com/api/test

五、常见“坑”

❌ 改了配置没 reload

nginx -t
nginx -s reload

❌ 以为是 Nginx 问题,其实是 数据库慢查询

❌ 防火墙 / 安全组把 upstream IP 拦了


六、一句话总结

504 基本不是 Nginx 错,而是后端太慢或挂了


如果你愿意,可以贴:

  • Nginx 配置
  • 后端类型(PHP / Java / Node)
  • 错误日志原文

我可以 直接帮你定位到具体参数和配置

0