504 gateway timeout 根源在 nginx 的 fastcgi_read_timeout(默认60秒),而非 php 的 max_execution_time;需修改 nginx 配置并重载,同时检查 php-fpm 的 request_terminate_timeout 并重启 fpm。

504 Gateway Timeout 不是 PHP 脚本超时,而是 Nginx(或 Apache)在等待 phpEnv 后端响应时主动断开连接——max_execution_time 改再大也无效。
phpEnv 的 504 根源在 Nginx fastcgi_read_timeout
phpEnv 是基于 Nginx + PHP-FPM 的集成环境,504 错误由 Nginx 发出,表示它已向 FPM 发起请求,但等不到响应就放弃了。这个“等待上限”由 fastcgi_read_timeout 控制,而非 PHP 层任何配置。
-
fastcgi_read_timeout默认通常是 60 秒,远低于你设的max_execution_time = 300 - 修改位置在 Nginx 的 server 或 location 块中,例如:
location ~ \.php$ { fastcgi_read_timeout 300; } - 改完必须重载 Nginx:
nginx -s reload(不是 restart) - 如果用的是 phpEnv 自带的控制面板,部分版本会覆盖该值,需检查其生成的 Nginx 配置文件(通常在
/phpenv/nginx/conf/vhost/下)
PHP-FPM 的 request_terminate_timeout 可能先于 Nginx 杀进程
即使 Nginx 愿意等 300 秒,FPM 自身也可能更早终止 worker 进程——这是 request_terminate_timeout 的作用,它优先级高于 max_execution_time。
OpenClaw Gateway 重启性能分析工具:分析重启速度、定位启动慢原因、生成性能报告、诊断启动问题。支持 Windows (PowerShell) 与 Linux (Bash)。触发场景:分析 gateway 重启、检查启动时间、生成报告、诊断异常。
- 该值默认常为 0(不限制),但某些 phpEnv 版本会设为 300 或 600
- 配置路径一般为:
/phpenv/php/etc/php-fpm.d/www.conf - 确认并修改这一行:
request_terminate_timeout = 300
- 改完必须重启 FPM:
/phpenv/php/sbin/php-fpm -t && /phpenv/php/sbin/php-fpm -R - 注意:设为 0 表示不限制,但高并发下易耗尽进程池,不推荐
cURL、数据库等 I/O 操作不受 max_execution_time 约束
你在脚本里调用 file_get_contents()、curl_exec() 或 mysqli_query(),哪怕卡住 2 分钟,max_execution_time 计时器基本不走——它只算 CPU 时间,不计 I/O 等待。
- cURL 必须显式设置:
CURLOPT_TIMEOUT和CURLOPT_CONNECTTIMEOUT,否则默认无限等待 - MySQL 连接超时需两处设:
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)+ 查询前执行SET SESSION wait_timeout = 10 - Redis、Elasticsearch 等客户端库同理,查其文档找 timeout 参数,别依赖 PHP 全局超时
set_time_limit(0) 在 phpEnv 中可能被忽略
很多 phpEnv 版本默认启用 php_admin_value max_execution_time 300(写在 FPM pool 配置里),这属于 PHP_INI_SYSTEM 级别,ini_set() 和 set_time_limit() 无法覆盖。
- 验证当前生效值:
var_dump(ini_get('max_execution_time'));—— 如果返回 300,说明已被 FPM 强制锁定 - 临时绕过:改
www.conf中的php_admin_value max_execution_time行,或注释掉整行 - 更稳妥的做法:把长任务拆成 CLI 脚本,用
php -d max_execution_time=0 script.php执行,完全脱离 Web 生命周期约束
真正卡住的从来不是 PHP 解析器,而是 Nginx 等不及、FPM 主动杀、下游服务没响应——盯着 max_execution_time 狂改,就像给漏水的屋顶刷漆。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










