1. 502 Bad Gateway 是什么意思?
当浏览器访问网站时,如果看到:
502 Bad Gateway
通常说明:
Nginx 本身已经收到请求,但它无法从后端服务获得正常响应。
也就是说,问题往往不在 Nginx 是否能启动,而是在 Nginx 后面的上游服务。
常见场景包括:
PHP-FPM 没有启动;
PHP-FPM Socket 路径不一致;
反向代理的后端程序没有运行;
Docker 容器异常退出;
上游端口没有监听;
后端程序主动关闭连接;
Nginx 无法访问上游 Socket;
后端服务器响应异常。
因此排查 502 时,建议先确认:
Nginx → 后端服务
这条链路到底在哪一层出现问题。
2. 先检查 Nginx 是否正常运行
首先执行:
systemctl status nginx --no-pager
正常情况下应该看到:
Active: active (running)
如果 Nginx 本身没有运行,可以继续检查配置。
执行:
nginx -t
正常情况下会看到类似:
syntax is ok
test is successful
如果这里直接报错,就应该先修复 Nginx 配置问题。
不要在 nginx -t 仍然报错的情况下反复重启 Nginx。
3. 第一时间查看 Nginx 错误日志

502 问题最重要的排查入口之一就是 Nginx Error Log。
常见位置:
/var/log/nginx/error.log
查看最近日志:
tail -n 100 /var/log/nginx/error.log
实时查看:
tail -f /var/log/nginx/error.log
然后刷新一次出现 502 的网页。
重点观察刚刚产生的错误。
例如:
connect() failed (111: Connection refused) while connecting to upstream
通常说明 Nginx 尝试连接后端时,目标端口没有正常接受连接。
如果看到:
No such file or directory
则可能是 PHP-FPM Socket 或其他 Unix Socket 路径不存在。
如果看到:
Permission denied
则应该继续检查 Socket 或目录权限。
4. PHP 网站出现 502 先检查 PHP-FPM
WordPress、ThinkPHP、Laravel 等 PHP 网站出现 502 时,PHP-FPM 是重点排查对象。
首先确认当前服务器运行的 PHP-FPM 服务。
例如:
systemctl list-units --type=service | grep php
如果使用 PHP 8.2,可能看到:
php8.2-fpm.service
检查状态:
systemctl status php8.2-fpm --no-pager
如果状态为:
Active: failed
或者:
inactive
说明 PHP-FPM 当前没有正常运行。
可以继续查看日志:
journalctl -u php8.2-fpm -n 100 --no-pager
找到 PHP-FPM 无法启动的具体原因。
5. 检查 PHP-FPM Socket 路径是否一致

这是 Nginx 502 中很常见的问题。
例如 PHP-FPM 实际监听:
/run/php/php8.2-fpm.sock
但 Nginx 配置中却写成:
/run/php/php8.1-fpm.sock
那么 Nginx 无法找到正确的 PHP-FPM Socket,就会出现 502。
可以检查 PHP-FPM:
grep -R "^listen" /etc/php/*/fpm/pool.d/ 2>/dev/null
例如:
listen = /run/php/php8.2-fpm.sock
再检查 Nginx:
grep -R "fastcgi_pass" /etc/nginx/ 2>/dev/null
例如:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
如果两边路径不一致,就需要修改 Nginx 配置,使其指向当前真实存在的 PHP-FPM Socket。
修改后先执行:
nginx -t
确认无误后再重新加载:
systemctl reload nginx
6. PHP-FPM 使用端口时怎么检查?
有些环境不使用 Unix Socket,而是监听:
127.0.0.1:9000
可以执行:
ss -lntp | grep 9000
如果没有任何输出,说明当前没有程序监听 9000 端口。
再检查 Nginx:
fastcgi_pass 127.0.0.1:9000;
如果 Nginx 指向 9000,但 PHP-FPM 实际没有监听这个端口,也会出现 502。
所以必须保证:
Nginx 配置的地址和 PHP-FPM 实际监听地址一致。
7. 反向代理网站出现 502 怎么排查?

如果 Nginx 不是运行 PHP,而是反向代理到:
Node.js;
Java;
Python;
Docker 应用;
其他 Web 服务,
例如 Nginx 配置:
location / {
proxy_pass http://127.0.0.1:3000;
}
那么需要先直接测试后端。
执行:
curl -I http://127.0.0.1:3000
如果提示:
Failed to connect
或者:
Connection refused
说明问题不在 Nginx 本身,而是:
3000 端口对应的后端程序没有正常运行。
继续检查:
ss -lntp | grep 3000
如果仍然没有输出,就需要排查真正的后端应用。
8. 后端程序正常但 Nginx 仍然 502
如果执行:
curl -I http://127.0.0.1:3000
可以正常返回:
HTTP/1.1 200 OK
但通过 Nginx 访问还是 502,则继续检查:
proxy_pass 地址;
协议是否正确;
域名解析;
Unix Socket 权限;
Nginx 错误日志;
上游 HTTPS 配置;
后端是否根据 Host Header 限制访问。
例如实际后端使用:
https://127.0.0.1:3000
但 Nginx 写成:
proxy_pass http://127.0.0.1:3000;
也可能出现异常。
需要根据后端实际协议配置。
9. Docker 应用出现 502 怎么办?
如果 Nginx 后端运行在 Docker 中,可以先执行:
docker ps -a
重点查看对应容器状态。
如果看到:
Exited
或者:
Restarting
说明容器本身就没有正常提供服务。
继续查看:
docker logs --tail 100 容器名称
如果项目使用 Docker Compose:
docker compose ps
再查看:
docker compose logs --tail 100
只有确认容器已经正常运行以后,才继续排查 Nginx 到容器的网络连接。
10. Docker 端口映射是否正确?
例如应用容器内部监听:
3000
Docker 映射:
0.0.0.0:3000->3000/tcp
Nginx 可以通过:
127.0.0.1:3000
访问。
执行:
docker ps
确认是否存在类似:
0.0.0.0:3000->3000/tcp
如果只看到:
3000/tcp
可能表示该端口没有映射到宿主机。
这种情况下 Nginx 如果运行在宿主机,就不能直接通过:
127.0.0.1:3000
访问这个容器。
需要根据当前 Docker 网络结构进行配置。
11. Nginx 和 Docker 都在容器里怎么办?
如果 Nginx 和后端应用都运行在同一个 Docker Compose 项目中,通常更适合通过服务名访问。
例如:
services:
nginx:
image: nginx:alpine
app:
image: example/app
Nginx 配置可以根据实际网络使用:
proxy_pass http://app:3000;
而不是:
proxy_pass http://127.0.0.1:3000;
因为在 Nginx 容器内部:
127.0.0.1
代表 Nginx 容器自己。
它并不代表另一个 app 容器。
这是 Docker 反向代理环境中非常容易出现的配置错误。
12. 检查 Unix Socket 权限
如果 Nginx 错误日志中看到:
Permission denied
同时后端使用 Unix Socket,例如:
/run/php/php8.2-fpm.sock
可以查看:
ls -l /run/php/php8.2-fpm.sock
再确认:
Nginx 运行用户;
PHP-FPM Pool 用户;
Socket 所有者;
Socket 权限。
不要为了临时解决权限问题直接执行:
chmod 777
作为长期方案。
应该根据当前 Nginx 和 PHP-FPM 运行用户正确设置 Socket 权限。
13. 检查 Nginx 配置是否加载了旧版本 PHP
服务器升级 PHP 后特别容易出现这种情况。
例如网站原来使用:
PHP 8.1
后来升级成:
PHP 8.2
但 Nginx 网站配置仍然指向:
php8.1-fpm.sock
执行:
nginx -T 2>&1 | grep fastcgi_pass
可以查看 Nginx 当前实际加载的 FastCGI 配置。
然后和:
grep -R "^listen" /etc/php/*/fpm/pool.d/ 2>/dev/null
进行对比。
不要只检查某个配置文件,而忽略 Nginx 实际加载的其他 include 文件。
14. 检查服务器内存是否不足
如果后端程序经常被系统杀掉,Nginx 也可能间歇性出现 502。
查看内存:
free -h
检查 OOM:
dmesg -T | grep -Ei 'out of memory|oom|killed process'
如果看到:
Out of memory: Killed process
说明服务器曾经因为内存不足终止某个进程。
如果被终止的正好是:
PHP-FPM;
Node.js;
Java;
Docker 容器,
那么 Nginx 就可能因为找不到上游而出现 502。
15. 检查磁盘是否已满
磁盘空间完全耗尽以后,也可能造成后端服务异常。
执行:
df -h
再检查 inode:
df -i
如果关键分区已经接近:
100%
PHP Session;
数据库;
日志;
临时文件;
应用缓存
都可能无法正常写入。
此时应该先处理磁盘问题。
16. 检查后端应用日志
Nginx Error Log 只能告诉你:
Nginx 连接后端时发生了什么。
真正的应用错误还需要查看后端自身日志。
例如 PHP-FPM:
journalctl -u php8.2-fpm -n 100 --no-pager
Docker:
docker logs --tail 100 容器名称
Node.js、Java、Python 等应用也应该检查各自的程序日志。
比较常见的问题包括:
数据库连接失败;
环境变量缺失;
配置文件错误;
程序异常退出;
内存不足;
端口被占用。
17. 502 和 504 有什么区别?
这两个错误容易混淆。
502 Bad Gateway
通常表示 Nginx 从上游收到无效响应,或者根本无法正常连接上游。
504 Gateway Timeout
通常更偏向:
Nginx 已经尝试等待上游响应,但在规定时间内没有得到结果。
例如后端接口执行非常慢;
数据库查询卡住;
上游服务响应超时。
如果是 504,排查重点通常还要关注:
后端性能;
数据库查询;
接口响应时间;
代理超时时间。
不要遇到所有网关错误都直接增加 Nginx timeout。
18. 是否应该直接增加 proxy_read_timeout?
如果后端只是因为处理任务确实需要较长时间,可以根据业务适当调整:
proxy_read_timeout 60s;
但如果真实原因是:
后端程序已经挂掉;
数据库无法连接;
容器不断重启;
端口根本没有监听,
增加 timeout 没有实际意义。
应该先确认上游服务能够正常工作,再考虑是否需要调整超时时间。
19. Nginx 502 快速排查顺序
建议按照以下顺序排查:
第一步:检查 Nginx
nginx -t
systemctl status nginx --no-pager
第二步:看错误日志
tail -n 100 /var/log/nginx/error.log
第三步:如果是 PHP 网站
检查 PHP-FPM:
systemctl status php8.2-fpm --no-pager
确认 Socket:
grep -R "^listen" /etc/php/*/fpm/pool.d/ 2>/dev/null
第四步:如果是反向代理
直接测试上游:
curl -I http://127.0.0.1:上游端口
第五步:如果使用 Docker
docker ps -a
docker logs --tail 100 容器名称
第六步:检查系统资源
free -h
df -h
这样通常能够比较快定位:
Nginx;
PHP-FPM;
上游应用;
Docker;
资源不足
到底是哪一层出现问题。
20. 不建议遇到 502 就重装 Nginx
502 大多数时候并不代表 Nginx 安装损坏。
如果 Nginx 本身能够正常显示:
502 Bad Gateway
反而说明 Nginx 很可能仍然在运行。
真正需要重点排查的是:
Nginx 后面的上游服务。
所以不要一看到 502 就直接:
卸载 Nginx;
重装服务器;
删除网站配置。
应该先查看:
tail -n 100 /var/log/nginx/error.log
再根据具体错误处理。
21. 搭建网站时的服务器建议
如果服务器同时运行:
Nginx;
PHP-FPM;
MySQL;
Redis;
Docker;
多个网站,
那么 CPU、内存和磁盘空间都可能影响后端服务稳定性。
如果需要部署 WordPress、Docker Web 应用、反向代理等业务,可以根据实际访问量和服务数量选择莱卡云 Linux 云服务器。
查看官网购买链接: https://www.lcayun.com
如果服务器还没有安装 Docker,可以参考:
安装教程: 服务器上安装docker和docker-compose教程
如果 Nginx 后端使用 Docker Compose,也可以参考:
相关阅读: 使用 Docker 搭建 Dockge:可视化管理 Docker Compose 项目
如果遇到的不是 502,而是端口从公网无法连接,可以参考:
相关阅读: 云服务器端口不通怎么办?Connection refused 与 timed out 排查教程
22. 总结
Nginx 出现:
502 Bad Gateway
通常意味着:
Nginx 能接收到请求,但后端服务没有正常返回结果。
首先执行:
nginx -t
确认 Nginx 配置。
然后查看:
tail -n 100 /var/log/nginx/error.log
错误日志通常会直接给出重要线索。
如果是 PHP 网站,重点检查:
PHP-FPM;
Socket;
FastCGI 配置。
如果是反向代理网站,直接测试:
curl -I http://127.0.0.1:上游端口
如果后端运行在 Docker 中,则继续检查:
容器状态;
容器日志;
端口映射;
Docker Network。
最后再结合:
内存;
磁盘;
OOM;
应用日志
判断后端为什么没有正常工作。
正确的排查顺序应该是:
Nginx → 错误日志 → PHP-FPM / 上游服务 → Docker → 系统资源
而不是一出现 502 就重新安装 Nginx。







