You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Nginx等待PHP-FPM处理?504超时问题求助

问题描述

网站采用PHP-FPM + Nginx架构,支持大型Excel文件导入,但Nginx总是在60秒后返回504网关超时。已经修改过以下配置,但问题依然存在:

已修改的Nginx配置

proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

已修改的PHP配置

request_terminate_timeout = 600s;
max_execution_time = 600s;

需要让Nginx等待PHP-FPM处理完成或最多等5分钟再响应,但找不到哪里还设置了60秒超时,求解决办法。

排查与解决思路
  • 检查Nginx upstream的超时配置
    如果Nginx用了upstream块指向PHP-FPM,得在upstream里单独设置keepalive_timeout 600s,否则upstream的默认超时会覆盖server块的fastcgi超时。示例:

    upstream php-fpm {
        server unix:/var/run/php-fpm.sock;
        keepalive_timeout 600s;
    }
    
  • 确认PHP-FPM pool的超时配置
    PHP-FPM是按pool分配置的(比如默认的www.conf),全局php.ini里的request_terminate_timeout优先级低于pool配置,要去对应pool的配置文件里把这个值改成600s,改完重启PHP-FPM服务。

  • 检查前端代理层的超时限制
    如果网站前端挂了CDN、Cloudflare或其他反向代理,这些服务可能默认有60秒超时限制,需要去对应服务的控制台调整超时时间。比如Cloudflare的默认HTTP超时就是60秒,得手动改长。

  • 调整PHP的max_input_time
    处理大文件上传时,max_input_time控制PHP接收请求数据的时间,默认可能是60秒,把它改成600s:

    max_input_time = 600s;
    
  • 修改Nginx的客户端超时配置
    Nginx的client_body_timeout和client_header_timeout默认是60秒,这两个是等待客户端发送请求体、请求头的超时时间,也需要改成600s:

    client_body_timeout 600s;
    client_header_timeout 600s;
    
  • 验证配置是否生效
    修改配置后必须重启Nginx和PHP-FPM(别只reload),然后用命令确认:

    • 查看PHP生效配置:php -i | grep max_execution_time
    • 查看Nginx生效配置:nginx -T | grep timeout,排查是否还有残留的60秒超时项。
  • 检查脚本自身的超时设置
    导入Excel的代码里有没有手动设置set_time_limit(60)?部分框架或自定义代码会强制设置脚本超时,改成set_time_limit(600)或者set_time_limit(0)(0表示依赖php.ini的全局配置)。

内容的提问来源于stack exchange,提问作者Tommy Hoang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:15:11