云服务器出现502和504怎么办?Nginx、PHP-FPM与上游超时排查清单

2026-08-22

先给结论:502通常表示网关从上游服务收到了无效响应,504通常表示网关等待上游响应超时。两者都不是“直接加带宽”就能解决的问题。正确顺序是先确认故障范围,再检查Nginx错误日志、上游进程、Socket或端口、CPU/内存/磁盘和数据库,最后才根据证据调整超时或服务器配置。

本文更新时间:2026年8月22日。适用于Nginx反向代理PHP-FPM、Node.js、Java或其他Web应用的常见部署。线上修改前应备份配置,并保留可快速回滚的旧版本。

502和504的区别是什么?

现象更常见的含义优先检查
502 Bad Gateway上游拒绝连接、进程退出、Socket路径错误,或返回了无效响应Nginx error.log、上游服务状态、监听端口与Socket权限
504 Gateway Timeout已经连接或尝试连接上游,但在允许时间内没有得到响应慢SQL、外部API、任务阻塞、连接池、proxy_read_timeout
偶发502/504峰值时资源或工作进程不足,也可能是发布时短暂重启错误发生时间对应的CPU、内存、I/O、连接数和发布记录

十分钟排查顺序

  1. 确认范围:测试首页、静态文件、动态接口和后台;记录发生时间、URL、状态码和请求ID。
  2. 绕开代理检查源站:仅在受控网络内用本机或源站地址访问上游,区分CDN、Nginx和应用层。
  3. 查同一时间段日志:Nginx的connect refused、upstream timed out、no live upstreams等信息比浏览器错误页更有价值。
  4. 检查进程与监听:确认PHP-FPM、Node或Java服务正在运行,监听地址与Nginx配置一致。
  5. 检查资源:同时看CPU、可用内存、Swap、磁盘空间、磁盘等待、连接数和文件句柄。
  6. 检查依赖:慢SQL、Redis、对象存储、DNS和第三方接口都可能让上游迟迟不返回。

Nginx和PHP-FPM常见故障点

Socket或端口不一致

Nginx配置的fastcgi_pass可能指向Unix Socket,也可能指向127.0.0.1端口。应用升级、PHP版本切换或面板重建配置后,实际监听路径可能变化。应同时核对Nginx生效配置和PHP-FPM pool配置,不能只看文件名猜测。

工作进程不足或被系统终止

当PHP-FPM工作进程全部繁忙,请求会排队;内存紧张时进程还可能被OOM Killer终止。此时直接提高pm.max_children可能让内存更快耗尽。应先测量单个进程实际RSS、峰值并发和可用内存,再计算安全上限。

超时只是结果,不一定是根因

Nginx官方文档分别定义了连接上游和读取上游响应的超时。若慢SQL需要90秒,把读取超时从60秒改为120秒只会让用户等待更久。只有确认业务确实需要长任务,并且异步化暂不可行时,才应调整超时并监控影响。

修复后怎样验证?

  • 从外网和源站分别重复访问受影响URL,确认HTTP状态、响应正文和登录态业务都正常。
  • 观察至少一个业务高峰,比较修复前后的错误率、P95响应时间、PHP-FPM繁忙进程和数据库耗时。
  • 检查Nginx和应用错误日志没有持续新增同类错误。
  • 保留回滚步骤;配置变更先执行语法检查,再平滑重载,避免把排障变成新的中断。

如果根因是容量不足,可结合煜钧云云服务器企业网站服务器配置选择指南重新做压测;若只在大文件或高峰期出现,也可先阅读云服务器带宽计算指南

常见问题

重启PHP-FPM能彻底解决502吗?

重启可能临时恢复服务,但不能证明根因已经解决。若问题来自内存泄漏、慢SQL、错误Socket或进程数不足,故障会再次出现。应在重启前后保存日志、进程和资源证据。

504一定是服务器配置低吗?

不一定。低配置只是可能性之一,数据库锁、外部接口超时、DNS问题和代码死循环也会导致504。应根据请求链路逐段定位。

官方参考资料

最近更新