Nginx代理出现504 Gateway Timeout

Nginx 代理出现 504 Gateway Timeout,意思是 Nginx 作为反向代理在限定时间内没有等到后端服务器(如 PHP-FPM、Java 应用、另一台内网机器)返回响应。
常见原因并不是 Nginx 本身出错,而是后端处理太慢、连接不通或 Nginx 默认超时时间设置太短。
本文会把 Nginx 代理涉及的超时参数全部说明白,并给出可直接复制使用的配置片段,帮你一步步定位和修复问题。

504 产生前,先确认后端是否真的健康

修改任何参数之前,先确认后端服务本身是否正常。
直接在服务器上执行下面命令,检查端口是否能连通:

curl -I http://127.0.0.1:8080 -m 5

如果后端是 PHP 环境,也可以检查对应端口进程:

ss -lntp | grep 8080

若 curl 迟迟不返回或报错,说明后端卡死或端口监听异常,此时调大 Nginx 超时只能暂时掩盖问题,优先修复后端。
若 curl 能快速返回,则大概率是 Nginx 的超时阈值过小。

Nginx 代理超时参数有哪些,分别作用在哪里

Nginx 的 http、server、location 块里都可以配置超时参数。
代理场景下最常用的是这几个:

  • proxy_connect_timeout:Nginx 与后端建立 TCP 连接的超时时间,默认 60 秒,通常不需要调太大,5-10 秒足够。
  • proxy_send_timeout:Nginx 向后端发送请求数据的超时时间,默认 60 秒。
  • proxy_read_timeout:Nginx 等待后端响应数据的超时时间,默认 60 秒。这是 504 最常命中的参数,后端处理超过这个时间就会被判定超时。
  • fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout:如果 Nginx 通过 FastCGI 代理到 PHP-FPM,需要修改这一组参数,而不是上面的 proxy 系列。
  • proxy_buffer_size 和 proxy_buffers:不是传统意义上的“超时”,但响应头或响应体过大时也会触发异常中断,容易被误认为超时。

修改时首先要判断你用的是普通反向代理(proxy_pass)还是 FastCGI(fastcgi_pass)。
宝塔面板、LNMP 一键包常见的是 fastcgi,使用 Laravel、ThinkPHP 等框架时尤其要看 fastcgi_read_timeout。

按场景调整超时配置

下面给出两种最常见场景的配置示例。
修改前建议先备份原配置:

cp /www/server/nginx/conf/nginx.conf /www/server/nginx/conf/nginx.conf.bak

场景一:普通 HTTP 代理到 Java/Node/Python 服务

在对应的 server 或 location 块中添加:

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

场景二:Nginx + PHP-FPM 出现 504

打开站点的 .conf 文件,找到 location ~ \.php 或 location ~ [^/]\.php 部分,在内部添加:

location ~ \.php$ {
    fastcgi_pass unix:/tmp/php-cgi-74.sock; # 按实际路径修改
    fastcgi_connect_timeout 10s;
    fastcgi_send_timeout 120s;
    fastcgi_read_timeout 300s;
}

如果同站点还有后台导入、导出等功能,建议把超时时间调高到 600 秒,或者把耗时任务改成异步队列,避免长时间占用 PHP 进程。

改完配置如何验证与常见避坑

配置修改后必须重载 Nginx 才生效:

nginx -t && nginx -s reload

如果有宝塔面板,也可以直接点击“重载配置”。
验证方式分两步:

  1. 再次触发之前产生 504 的请求,观察是否恢复;
  2. 查看 Nginx 错误日志:
tail -f /www/wwwlogs/nginx_error.log

若日志中出现 upstream timed out,说明是 proxy_read_timeout 或 fastcgi_read_timeout 不够;
若出现 connect upstream timed out,则是 proxy_connect_timeout 过短或后端防火墙拦截。

避坑提醒:不要盲目把所有超时都调到几千秒。
过长的 proxy_read_timeout 会占用大量连接资源,导致 Nginx 并发能力下降。
更合理的做法是先定位慢请求来自哪个接口,然后只对那个 location 单独调大超时。
同时注意 PHP 的 max_execution_time 也要相应调整,否则 Nginx 等到了,PHP 进程自己却已终止。

最后说一句实操结论

遇到 Nginx 代理 504 时,先确认后端端口是否正常,再根据代理类型(proxy_pass 还是 fastcgi_pass)修改对应超时参数,最后用 nginx -t 校验配置并重载。
大多数情况下,把 proxy_read_timeout 或 fastcgi_read_timeout 从 60 秒调整到 300 秒即可解决。
若调大后仍超时,问题不在 Nginx,而在后端应用本身,需要检查数据库慢查询、外部接口调用或服务器负载。
建议你在本地测试环境中先模拟慢请求,确认参数调整确实生效,再放到生产环境。

分享到:
上一篇
Redis连接数打满,客户端泄漏
下一篇
中转服务容器化Docker‑Compose一键部署生产模板
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意