温馨提示×

nginx日志502怎么排查

小樊
50
2026-10-08 12:50:43
栏目: 编程语言

nginx 出现 502 Bad Gateway 通常表示:nginx 作为反向代理,无法从后端服务(如 PHP-FPM、Tomcat、Node、Python 等)拿到有效响应。排查可以从「nginx → 后端 → 系统资源 → 配置」逐步进行。

下面是一套实用排查流程(以最常见场景为例)。


一、先看 nginx 错误日志(最关键)

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

常见 502 报错及含义:

1️⃣ connect() failed (111: Connection refused)

➡ 后端服务没启动或端口不对

排查:

ps aux | grep php-fpm
netstat -lntp | grep 9000

2️⃣ upstream timed out (110: Connection timed out)

➡ 后端响应太慢 / 卡死

排查:

  • 后端接口是否死循环
  • 数据库是否慢查询
  • 后端线程/进程是否打满

3️⃣ no live upstreams

➡ upstream 里所有后端都不可用

排查:

upstream backend {
    server 127.0.0.1:8080;
}

确认后端是否全部挂掉

4️⃣ permission denied (socket)

➡ nginx 没权限访问 unix socket

常见于 PHP-FPM:

ls -l /run/php/php-fpm.sock

确保 nginx 用户(如 www-data)有权限


二、确认后端服务本身是否正常

绕过 nginx,直接测后端

PHP-FPM

curl http://127.0.0.1:9000

(或用 fpm status)

Java / Node

curl http://127.0.0.1:8080/health

✅ 如果后端直接访问也报错 → 问题在后端
✅ 后端正常但 nginx 502 → 问题在 nginx 配置 or 网络


三、检查 nginx 反向代理配置

常见错误配置:

location / {
    proxy_pass http://127.0.0.1:8080;
}

✅ 确认:

  • IP / 端口是否正确
  • 是否少了 /
  • 是否协议写错(http / https)

四、调整超时参数(临时缓解)

proxy_connect_timeout 10s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;

PHP-FPM 场景:

fastcgi_connect_timeout 10s;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;

五、系统资源问题(高并发常见)

1️⃣ 文件描述符耗尽

ulimit -n

nginx 配置:

worker_rlimit_nofile 65535;

2️⃣ 后端进程数不够

  • PHP-FPM:pm.max_children
  • Tomcat:maxThreads
  • Node:cluster 模式

3️⃣ CPU / 内存打满

top
free -h

六、快速自查清单 ✅

  • [ ] nginx error.log 报错类型
  • [ ] 后端服务是否存活
  • [ ] 端口 / socket 是否正确
  • [ ] 后端响应是否超时
  • [ ] 防火墙 / SELinux
  • [ ] 资源是否打满

七、如果你愿意,我可以更精准帮你

你可以贴出:

  1. nginx 错误日志
  2. nginx 配置(server / upstream)
  3. 后端类型(PHP / Java / Node / Python)

我可以直接帮你定位是哪一行配置或哪个服务的问题。

0 踩