📑 本文导航
Nginx 502 Bad Gateway 含义
502 不是 Nginx 本身挂了,Nginx 已经正常运行,但是 Nginx 转发请求给后端服务(PHP-FPM / Node / Java / Python 应用)的时候,连不上后端、后端进程崩溃、返回无效响应,就抛出 502。

第一步:先看错误日志(最重要!)
# 查看nginx错误日志
tail -f /var/log/nginx/error.log
日志关键字对应原因:
connect() failed (111: Connection refused)→ 后端服务没启动 / 端口写错(最常见)connect() failed (13: Permission denied)→ socket 权限不足 / SELinux 拦截upstream sent too big header→ 后端响应头过大prematurely closed connection→ 后端程序崩溃、被 OOM 内存杀手杀掉
第二步:检查后端服务(分两种场景)
场景 A:PHP 网站(使用 PHP-FPM)
- 查看 php-fpm 状态
systemctl status php-fpm
# 或者指定版本,如 php8.1-fpm
systemctl status php8.1-fpm
没运行就启动:
systemctl start php8.1-fpm
systemctl enable php8.1-fpm
- 核对 Nginx 配置里的 fastcgi_pass
# nginx站点配置
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 这里路径必须和php-fpm的listen一致
# 或者端口形式 fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
查看 php-fpm 监听:cat /etc/php/8.1/fpm/pool.d/www.conf | grep listen
- socket 权限问题(日志报 13 权限拒绝)
ls -l /run/php/php8.1-fpm.sock
# 修改属主为www-data
chown www-data:www-data /run/php/php8.1-fpm.sock
场景 B:反向代理(Node/Java/Gunicorn,proxy_pass)
nginx 配置示例:
location / {
proxy_pass http://127.0.0.1:3000; #后端地址端口
proxy_set_header Host $host;
}
- 直接测试后端能不能通:
curl http://127.0.0.1:3000
curl 报错 = 后端服务本身挂了,需要启动应用。 2. 检查后端进程是否监听端口:
netstat -tlnp | grep 3000
# 或者 ss -tlnp | grep 3000
第三步:系统资源排查(间歇性 502,忽好忽坏)
# 内存,看是否内存耗尽被OOM杀进程
free -m
# 磁盘满了也会502
df -h
# 看内核是否OOM杀死后端程序
dmesg | grep -i kill
第四步:超时 / 缓冲区调优(可选)
PHP-FPM 增加超时
http {
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
}
proxy 反向代理增加超时
location / {
proxy_pass http://127.0.0.1:3000;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffers 8 128k;
proxy_buffer_size 128k;
}
改完校验语法,重载 nginx:
nginx -t
systemctl reload nginx
快速应急顺序
tail /var/log/nginx/error.log看日志报错关键词- 启动 / 重启后端服务(php-fpm /node/java 应用)
- 核对 nginx
fastcgi_pass/proxy_pass的地址、端口、socket 路径 - curl 直接访问后端地址,确认后端独立可访问
- 检查内存、磁盘、socket 权限、SELinux
区分:
- 502:Nginx 连不上后端
- 504:连上后端,但后端响应太慢超时