必须同步修改 php 的 max_execution_time、max_input_time、memory_limit,php-fpm 的 request_terminate_timeout,nginx 的 fastcgi_read_timeout 等四个超时参数并重启服务,否则仍会 504。

max_execution_time 是 PHP 脚本能运行的最长时间,超时后进程会被强制终止——这不是警告,是直接 kill。宝塔里改它,必须同时动三处,只改一处大概率还是 504。
改 php.ini 是基础,但不等于生效
这是全局设置,影响所有用该 PHP 版本的网站。进宝塔【软件商店】→ 找对应 PHP(如 PHP 8.2)→ 【设置】→ 【配置修改】,找到这行:
max_execution_time = 300
改成你需要的秒数(比如 600 表示 10 分钟)。但注意:
-
max_input_time也得同步调大,否则表单提交或文件上传中途就断了 -
memory_limit如果太小(比如仍为128M),脚本可能在超时前先因内存耗尽崩溃 - 改完必须点【重载配置】或【重启】PHP 服务,否则只是改了个寂寞
fastcgi_read_timeout 必须和 max_execution_time 对齐
Nginx 和 PHP-FPM 是靠 FastCGI 协议通信的,Nginx 等不到 PHP 返回就会自己报 504。这个超时和 max_execution_time 是两套机制,互不感知。
进【网站】→ 目标站点 → 【设置】→ 【配置文件】,找到 location ~ \.php(.*)$ { 这段,在里面加:
fastcgi_read_timeout 600; fastcgi_send_timeout 600; fastcgi_connect_timeout 600;
三个值建议设成一样,且 ≥ max_execution_time。别只加 read_timeout,漏掉另外两个照样失败。
单站要用 .user.ini,但得确认它没被禁用
如果只想给某个网站放宽限制(比如后台导出报表的站点),优先用 .user.ini:进该站【根目录】,新建或编辑 .user.ini,写入:
max_execution_time = 600 max_input_time = 600
但它有个硬前提:user_ini.filename 必须启用。去 phpinfo 页面搜这个词,如果值是空或 none,说明被关了——得回 PHP 设置里打开,或者直接改 php.ini 的 user_ini.filename = ".user.ini"。
权限也要对:.user.ini 文件权限必须是 644,否则 PHP 拒绝读取。
别忘了 request_terminate_timeout 这个隐藏开关
PHP-FPM 自己还有个更底层的熔断机制,路径在 /www/server/php/80/etc/php-fpm.conf(版本号按实际替换),找这一行:
request_terminate_timeout = 300
它默认可能注释掉了,但一旦启用,会强杀所有超过该时间的请求,且**优先级高于 max_execution_time**。如果你已经调高了 max_execution_time 却还是被杀,八成是它在背后动手。把它设为和 max_execution_time 一致或更大,比如 600,然后重启 PHP-FPM。
真正容易被忽略的,是这四个参数必须形成闭环:PHP 层、PHP-FPM 层、FastCGI 协议层、Web 服务器代理层——少一个,超时就可能在你想不到的地方发生。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











