Nginx 502 网关错误通常意味着 Nginx 未能从上游服务器(如 PHP-FPM、Node.js 或其他后端应用)收到有效响应。
最常见的原因包括应用服务已停止、上游端口或套接字配置错误,以及后端进程崩溃或意外关闭连接。
首先检查 Nginx 错误日志。日志通常能明确指出连接失败的原因。
本指南介绍运行 Nginx 的 Linux 服务器上排查问题的七个实用步骤。
Nginx 502 网关错误的原因是什么?
Nginx 通常充当反向代理,将请求转发给后端应用,再将其响应返回给访问者。
如果上游服务未能正确响应,Nginx 可能返回 HTTP 状态码 502。
常见原因包括:
- 后端服务停止或崩溃。
- 上游 IP 地址、端口或 Unix 套接字配置错误。
- PHP-FPM 或应用进程发生故障。
- 套接字访问权限存在问题。
- 内存或磁盘空间不足。
- 上游连接无效或过早关闭。
以下检查步骤以您拥有 SSH 访问权限和 Linux 服务器管理权限为前提。
如果您不熟悉如何访问远程服务器,请先阅读我们的SSH 命令入门指南,再继续操作。

1. 检查 Nginx 错误日志
查看 Nginx 错误日志通常是找出 502 错误原因最快的方法。
通过 SSH 连接到服务器并运行:
sudo tail -n 50 /var/log/nginx/error.log
这会显示最新的 50 条日志记录。
要实时排查问题,请使用:
sudo tail -f /var/log/nginx/error.log
重新加载出现问题的网页,并留意新出现的日志消息。
| 日志消息 | 可能的问题 |
|---|---|
connect() failed (111: Connection refused) | 后端未接受连接 |
No such file or directory | 配置的上游套接字不存在 |
Permission denied | Nginx 无法访问套接字或资源 |
upstream prematurely closed connection | 后端意外关闭了连接 |
upstream sent invalid header | 后端返回的响应标头格式不正确 |
您的托管环境可能使用不同的日志路径。
在确定可能的原因之前,不要更改 Nginx 设置。
2. 检查后端服务是否正在运行
502 错误通常是因为 Nginx 后面的应用已停止运行。
对于由 systemd 管理的应用服务,运行:
sudo systemctl status myapp
将 myapp 替换为实际的服务名称。
对于使用 PHP-FPM 的 PHP 应用,服务名称可能如下所示:
sudo systemctl status php8.3-fpm
已安装的 PHP 版本和服务名称可能有所不同。
如果服务运行失败,请查看其日志:
sudo journalctl -u myapp -n 50
检查是否存在崩溃、依赖项缺失、配置错误或与内存有关的故障。
只有在确定并解决根本问题后,才重启服务。
3. 核对上游端口或套接字
Nginx 必须将请求转发到正确的后端地址。
例如,反向代理配置中可能包含:
location / {
proxy_pass http://127.0.0.1:3000;
}
这表示 Nginx 会将请求转发给监听 3000 端口的 HTTP 应用。
检查是否有进程正在监听该端口:
sudo ss -ltnp | grep ':3000'
您也可以直接测试 HTTP 后端:
curl -i http://127.0.0.1:3000/
如果后端不可用,应先检查其服务配置,再考虑更改 Nginx 配置。
检查 PHP-FPM 套接字
PHP-FPM 通常使用 Unix 套接字或 TCP 端口。
Nginx 配置中可能包含:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
检查配置的套接字是否存在:
ls -l /run/php/
套接字路径必须与 PHP-FPM 进程池的 listen 设置一致,而且 Nginx 必须具有连接权限。
重要提示:proxy_pass 用于 HTTP 上游服务,而 fastcgi_pass 用于 PHP-FPM 等 FastCGI 服务。两者不能互换。
4. 检查服务器内存和磁盘空间
当服务器资源耗尽时,后端应用可能崩溃或停止响应。
检查内存:
free -h
检查磁盘空间:
df -h
检查正在运行的进程:
top
如果应用因内存压力而被终止,您可能会在系统日志中找到相关消息:
sudo journalctl -k --since "1 hour ago"
查找内存不足事件或进程终止消息。
如果磁盘空间已耗尽,请先查明空间被哪些内容占用,再删除文件。
如需了解其他监控命令,请参阅我们的服务器管理必备 Linux 命令。
5. 检查套接字权限和应用日志
有时后端虽然正在运行,Nginx 却无法与之通信。
对于 Unix 套接字,请检查其所有者和权限:
ls -l /run/php/
如果日志报告权限错误,还应检查通往套接字的各级目录。
正确的权限取决于 Nginx 工作进程用户和后端服务的配置。
避免设置 chmod 777 这样的宽泛权限。应调整相关服务或进程池的配置,让获得授权的进程能够访问套接字。
如果错误日志显示上游过早关闭连接,请检查后端应用的日志,查找崩溃、异常或请求失败的记录。
6. 测试 Nginx 配置
代理设置错误或配置变更也可能中断与上游服务的通信。
应用更改前,请验证 Nginx 配置:
sudo nginx -t
如果测试通过,请重新加载 Nginx:
sudo systemctl reload nginx
重新加载可以应用有效的配置更改,而不必重启服务。
如果测试失败,请先修正报告的配置错误。
不要盲目增加代理超时时间或缓冲区大小。这些调整无法解决后端服务停止、套接字配置错误或连接被拒绝的问题。
7. 确认 502 错误已修复
解决根本问题后,测试受影响的 URL:
curl -I https://example.com
将 example.com 替换为您的实际域名。
请求成功时通常会返回 200 OK 等适当的 HTTP 状态,但重定向和其他有效响应可能返回不同的状态码。
同时在浏览器中打开网站,并再次查看 Nginx 错误日志。
如果错误在高负载下再次出现,请在复现问题的同时监控后端服务和资源使用情况。
如何预防 Nginx 502 错误
并非所有后端故障都能预防,但良好的服务器管理可以减少本可避免的服务中断。
- 监控 Nginx 和后端服务的运行状态。
- 部署后查看应用日志。
- 配置适当的服务恢复策略。
- 监控内存、存储空间和连接的使用情况。
- 应用配置更改前先进行验证。
- 在通过 Nginx 转发流量之前,先直接测试应用。
如果应用需要更多资源,请先测量实际使用量,再决定是否升级服务器配置。
502 错误表示上游服务器返回了无效响应,而504 错误则表示上游服务器响应时间过长。如果您遇到的是后者,请参阅我们的504 网关超时错误修复指南,排查应用响应缓慢、服务器资源和代理超时设置等问题。
常见问题
这表示充当网关或代理的 Nginx 收到了上游服务器的无效响应。原因通常是后端服务已停止,或上游连接出现问题。
不一定。重启或重新加载 Nginx 无法解决应用不可用、后端端口配置错误或 PHP-FPM 套接字缺失的问题。
502 错误表示上游服务器返回了无效响应,而 504 错误表示网关未能在超时时间内收到上游服务器的响应。
会。内存耗尽可能导致后端进程崩溃或被终止,使 Nginx 无法与其通信。
不是。其他网关、代理、CDN 和负载均衡器也可能返回 HTTP 502 错误。
总结
要修复 Nginx 502 网关错误,首先需要查明上游应用未能正确响应的原因。
先检查 Nginx 错误日志,确认后端服务正在运行,并核对配置的端口或套接字。然后排查资源限制、权限和应用故障。
在大多数情况下,找出具体的上游故障比反复重启 Nginx 或更改超时设置更有效。