当充当网关或代理的服务器未能及时收到另一台服务器的响应时,就会出现 504 网关超时错误。这通常发生在网站后端应用程序响应缓慢、负载过高或存在连接问题时。
如果您只是访问网站,请稍等片刻后刷新页面。如果您管理该网站,请先检查服务器和应用程序日志,确定延迟发生在哪个环节。
以下是排查这一错误的七种实用方法。
504 网关超时错误由什么引起?
许多网站使用多台服务器或多种服务来处理请求。
例如,浏览器可能先连接到 Nginx 或 CDN,再由其将请求转发给应用程序服务器。
如果该应用程序响应时间过长,网关可能返回 504 错误,而不是请求的页面。
常见原因包括:
- 应用程序服务器负载过高或无响应。
- 数据库查询或外部 API 请求缓慢。
- CPU、内存或应用程序工作进程不足。
- 网关与后端之间存在网络问题。
- 代理或应用程序的超时限制。
- CDN 或托管基础设施配置不当。
504 错误通常是服务器端问题,不过特定连接的问题有时也会影响个别访客。

1. 刷新网站并检查其是否可访问
如果您只是访问网站,请稍等片刻后刷新页面。
服务器暂时过载或后端请求中断的问题可能会自行恢复。
您也可以尝试使用其他浏览器或网络,看看问题是否只与您的连接有关。
如果所有人都遇到这一错误,通常需要由网站所有者或托管服务提供商进行调查。
请勿反复提交付款、订单或表单。即使网关在返回响应前已超时,后端操作也可能已经完成。
2. 检查服务器和应用程序日志
如果您管理服务器,最好先从日志文件入手。
对于 Nginx,请检查错误日志:
sudo tail -n 50 /var/log/nginx/error.log
查找类似以下内容的消息:
upstream timed out (110: Connection timed out)
这表明 Nginx 等待上游操作完成的时间过长。
接下来,检查应用程序日志,确定后端响应缓慢的原因。
您也可以检查由 systemd 管理的服务:
sudo journalctl -u myapp -n 50
将 myapp 替换为您的实际服务名称。
如果您以前没有使用过 SSH,我们的SSH 命令入门指南介绍了如何连接到 Linux 服务器。
3. 检查 CPU、内存和磁盘使用情况
服务器负载过高时,可能难以在网关超时期限内处理请求。
检查内存:
free -h
检查磁盘空间:
df -h
监控进程:
top
留意持续的资源压力、内存耗尽、文件系统空间已满或异常繁忙的进程。
这些结果不能直接证明请求超时的原因,但有助于找出性能瓶颈。
我们的服务器管理必备 Linux 命令指南还介绍了用于检查进程、服务和日志的其他命令。
4. 排查 Nginx 和上游超时
如果 Nginx 用作反向代理,请检查上游应用程序能否在配置的超时期限内响应。
对于 HTTP 后端,配置中可能包含:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 60s;
}
proxy_read_timeout 设置控制的是 Nginx 从后端连续两次读取数据之间的等待时间,而不是整个请求的总时长。
在增大该值之前,请直接测试后端:
curl --max-time 15 -i http://127.0.0.1:3000/
将地址替换为应用程序的实际端点。有些应用程序路由可能需要身份验证,或返回 HTTP 200 以外的有效响应。
如果应用程序本身响应缓慢,延长 Nginx 的超时时间可能只是掩盖根本问题。
如果确实有理由设置更长的超时时间,也请检查应用程序的超时设置。基于 PHP-FPM 和 FastCGI 的应用程序使用的 Nginx 指令与 HTTP 代理后端不同。
更改配置后,请先验证 Nginx 配置,再重新加载:
sudo nginx -t
sudo systemctl reload nginx
只有配置测试成功后才重新加载。
5. 检查 Cloudflare 或您使用的 CDN
如果您的网站使用 Cloudflare 或其他内容分发网络,请确定超时发生在 CDN 还是源站服务器。
查看您所用 CDN 的错误信息,并与源站服务器日志进行对比。
504 错误可能来自源站服务器后面的上游服务,也可能来自请求路径中的其他环节。
Cloudflare 有自己的连接和响应超时机制,因此增大 Nginx 的超时设置不一定能突破 CDN 施加的限制。
在确定超时来源之前,请勿禁用安全或缓存功能。
6. 排查缓慢的数据库查询和外部 API
有时 Web 服务器运行正常,但应用程序正在等待其他服务。
常见情况包括:
- 数据库查询耗时过长。
- 外部 API 响应缓慢。
- 应用程序工作进程池耗尽。
- 后台任务争用资源。
- 数据库锁导致请求延迟。
检查应用程序日志、慢查询日志和服务指标,找出延迟发生的环节。
如果问题由数据库查询引起,请排查索引、查询执行计划和连接使用情况。
对于外部 API 调用,请配置合理的超时时间和错误处理。如果应用程序支持异步处理,耗时较长的任务可能更适合以异步方式执行。
7. 联系您的托管服务提供商
如果您无法解决 504 网关超时错误,请携带收集到的信息联系托管服务提供商。
请提供受影响的域名、问题开始的时间、问题是否间歇性出现,以及相关的日志消息。
还应说明近期是否更改过应用程序、数据库、CDN 或反向代理的配置。
托管服务提供商可以帮助调查超出您管理权限范围的资源限制和基础设施问题。
502 与 504 网关错误有什么区别?
这两种错误有关联,但表明的上游问题不同。
| 错误 | 含义 |
|---|---|
| 502 错误网关 | 网关收到了上游服务器的无效响应 |
| 504 网关超时 | 网关未能及时收到所需的上游响应 |
例如,应用程序意外关闭连接可能导致 502 错误,而应用程序响应时间过长则可能导致 504 错误。
如果您专门排查上游响应无效的问题,请阅读我们的指南:如何修复 Nginx 中的 502 错误网关。
如何预防 504 网关超时错误
并非所有超时都能避免,但良好的基础设施管理有助于减少超时。
- 监控应用程序响应时间和资源使用情况。
- 排查缓慢的数据库查询。
- 对频繁请求的内容使用适当的缓存。
- 为上游服务和应用程序配置合理的超时时间。
- 监控后端服务和工作进程的可用情况。
- 部署重大配置变更前先进行测试。
应审慎决定是否提高超时限制,而不是将其作为排查问题的第一步。
常见问题
是的。HTTP 504 是服务器端状态码,表示网关或代理未能及时收到上游服务器的响应。
通常不能。清除浏览器缓存无法解决后端服务器负载过高或无响应的问题。不过,尝试其他浏览器或网络连接有助于排除局部问题。
可能是暂时的。临时过载或后端请求缓慢的问题可能很快自行恢复;如果反复出现超时,则表明存在需要调查的问题。
会。如果数据库查询、PHP 处理或上游服务耗时过长,WordPress 和其他应用程序都可能出现 504 错误。
只有在应用程序确实需要更长时间,且其他基础设施限制允许时才应这样做。首先要确定后端响应延迟的原因。
总结
504 网关超时错误表示网关等待上游服务器响应的时间过长。
访客可以检查问题是否只是暂时的,而管理员应检查日志、服务器资源、应用程序性能和代理设置。
最可靠的修复方法是找出延迟的来源,而不是盲目提高超时限制或重启服务。