news 2026/10/2 6:57:23

Nginx 出现 502 和 504 怎么区分?从错误日志开始排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx 出现 502 和 504 怎么区分?从错误日志开始排查

Nginx 出现 502 和 504 怎么区分?从错误日志开始排查

网站无法访问时,Nginx 经常会返回502 Bad Gateway或504 Gateway Time-out。这两个错误页面看起来很像,但背后的原因并不完全相同。

简单理解:

  • 502:Nginx 联系上游服务时,连接失败或收到了无效响应;
  • 504:Nginx已经把请求交给上游服务,但等待太久仍未拿到响应。

下面记录一套我平时使用的排查顺序。

一、先确认真实的 HTTP 状态码

不要只根据浏览器页面上的文字判断,可以使用curl查看响应头:

curl-Ihttps://example.com

如果网站有跳转,可以继续跟随跳转:

curl-ILhttps://example.com

返回结果中会看到真实状态,例如:

HTTP/2 502 server: nginx

或者:

HTTP/1.1 504 Gateway Time-out Server: nginx

如果前面使用了 CDN,还要注意这个错误页面可能来自 CDN,而不一定是源站 Nginx。

二、查看 Nginx 错误日志

确认状态码后,第一步不是马上修改超时时间,而是查看错误日志:

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

实时观察日志:

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

宝塔面板安装的 Nginx,网站日志也可能位于:

/www/wwwlogs/

可以先查找日志文件:

find/www/wwwlogs-typef-name"*.log"-size+02>/dev/null

不同日志内容通常对应不同原因。

1. connect() failed

例如:

connect() failed (111: Connection refused) while connecting to upstream

这通常说明 Nginx 无法连接后端服务,常见原因包括:

  • PHP-FPM 没有启动;
  • Node.js、Java 或 Python 服务已经停止;
  • Nginx 配置的端口错误;
  • 上游服务只监听了其他地址;
  • Unix Socket 文件不存在或权限不正确。

2. upstream timed out

例如:

upstream timed out (110: Connection timed out) while reading response header from upstream

这表示 Nginx 已经连接到后端,但后端程序迟迟没有返回响应,最终触发超时。

常见原因有:

  • 数据库查询时间过长;
  • PHP 脚本卡住;
  • 外部接口响应缓慢;
  • 后端任务执行时间过长;
  • 服务器 CPU 或内存资源不足。

三、确认后端服务是否运行

如果 Nginx 反向代理到本机的127.0.0.1:8080,可以查看端口监听情况:

ss-lntp|grep8080

如果没有任何结果,通常说明后端服务没有启动,或者实际监听的端口不是 8080。

可以直接绕过 Nginx 请求后端:

curl-vhttp://127.0.0.1:8080/

如果本地请求也失败,问题基本在上游服务,而不是 Nginx。

对于 PHP 网站,可以检查 PHP-FPM:

systemctl status php-fpm

有些服务器安装了多个 PHP 版本,服务名称可能是:

systemctl list-units--type=service|grep-iphp

找到真实服务名称后,再查看运行状态和日志。

四、检查 Nginx 配置的地址是否一致

反向代理配置可能类似:

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

如果程序实际监听的是127.0.0.1:3000,Nginx 却请求 8080,就会返回 502。

修改配置后,先检查语法:

nginx-t

确认没有错误,再平滑重新加载:

nginx-sreload

使用 PHP-FPM 时,还要确认fastcgi_pass指向的端口或 Socket 是否真实存在:

fastcgi_pass unix:/run/php/php-fpm.sock;

可以使用下面的命令检查 Socket:

find/run /var/run-types2>/dev/null|grepphp

五、504 是否应该直接增加超时时间?

如果后端程序确实需要较长时间,可以适当增加 Nginx 的读取超时时间:

location / { proxy_pass http://127.0.0.1:8080; proxy_connect_timeout 10s; proxy_send_timeout 60s; proxy_read_timeout 120s; }

PHP 网站可以设置:

fastcgi_connect_timeout 10s; fastcgi_send_timeout 60s; fastcgi_read_timeout 120s;

修改后执行:

nginx-tnginx-sreload

但增加超时时间只适合后端任务本来就需要较长时间的情况。如果普通页面也要几十秒才能打开,应该继续检查数据库慢查询、接口请求和程序死循环,而不是单纯把超时时间改得越来越大。

六、检查服务器资源

当 CPU、内存或磁盘出现问题时,上游服务也可能无响应。

查看系统负载:

uptime

查看内存:

free-h

查看磁盘:

df-h

查看当前进程资源占用:

top

如果内存耗尽,系统可能会终止 PHP、MySQL 或其他后端进程。可以检查内核日志:

dmesg-T|grep-i-E"out of memory|killed process"

七、我的排查顺序

以后再遇到 502 或 504,可以按照下面的顺序处理:

  1. 用curl -I确认真实状态码;
  2. 查看 Nginx 的error.log;
  3. 检查上游服务是否运行;
  4. 检查端口或 Socket 是否存在;
  5. 直接请求本机上游地址;
  6. 检查 CPU、内存和磁盘;
  7. 最后再考虑调整超时时间。

502 更偏向“连接或响应异常”,504 更偏向“等待上游超时”。先看日志,再根据错误内容处理,通常比反复重启 Nginx 更快找到原因。

文章标签:Nginx、Linux、502、504、服务器运维

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 6:56:37

Wenyi快速上手:从安装到第一次EPUB翻译的最短路径

Wenyi快速上手:从安装到第一次EPUB翻译的最短路径 【免费下载链接】wenyi 将被语言阻隔的作品,带到读者的语言中。Bringing literature into your language. 项目地址: https://gitcode.com/BigDawnGhost/wenyi Wenyi(文译&#xff09…

作者头像 李华
网站建设 2026/10/2 6:56:06

郑州蔬菜种子展销会公司有哪些?本地靠谱服务机构排行榜

想找靠谱的郑州蔬菜种子展销服务机构,这篇文章帮你把行业门道一次讲清很多第一次接触蔬菜种子行业展会的朋友,都会有一个共同的困惑:郑州及周边的种子展销活动数量不少,规模大小不一,主办方的专业程度参差不齐&#xf…

作者头像 李华
网站建设 2026/10/2 6:55:12

服务器取证实战指南:易失数据采集与磁盘镜像分析要点

1. 进场先别急着碰服务器:定边界、留授权、记现场接到求助电话的时候,通常已经是攻击发生之后了。有人在凌晨两三点打过来,说数据库被拖了,网站被人挂马了,或者干脆就是一句“我们服务器好像被黑了,你快来看…

作者头像 李华
网站建设 2026/10/2 6:54:32

二手苹果设备入库核验:描述文件、联网激活与解除记录怎么查

二手苹果设备的成色和功能检查通过后,还需要核验设备管理状态。对于退租回收、企业批量流转的设备,合同结清、本地描述文件移除和组织侧解除关联,是不同的检查事项。 本文将收货核验整理为三个步骤:检查本地管理信息、抹掉后联网…

作者头像 李华
网站建设 2026/10/2 6:54:26

算法-topK

完整算法&#xff0c;C语言版本&#xff1a;#include <stdio.h> #include <string.h>#define K 10 #define NAME_LEN 50// 一条热搜 typedef struct {char name[NAME_LEN];int hot; // 热度 } HotItem;// // 交换两个热搜 // void swap(HotItem *…

作者头像 李华