504错误是Nginx主动断连所致,须同步调整Nginx的fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout,PHP-FPM的request_terminate_timeout和max_execution_time,以及宝塔“网站超时时间”开关,缺一不可。

504 不是 PHP 崩了,是 Nginx 主动断连 —— 必须同步调 Nginx、PHP-FPM、FastCGI 三层超时,漏一环就白改。
为什么只改 proxy_read_timeout 还是 504
Nginx 到 PHP-FPM 是三段式通信:建立连接(fastcgi_connect_timeout)、发送请求(fastcgi_send_timeout)、读取响应(fastcgi_read_timeout)。宝塔默认只暴露 fastcgi_read_timeout 的修改入口,但另外两段同样会触发 504。
- 若 PHP-FPM 进程卡死或 Unix socket 文件不可读,
fastcgi_connect_timeout先超时 - 大 POST 数据(如文件上传)传输慢,
fastcgi_send_timeout可能先炸 -
proxy_*_timeout系列参数对 FastCGI 流量无效,只影响反向代理(比如代理 Python/Tomcat),别混用
在宝塔里正确改 FastCGI 超时的三处位置
必须手动编辑站点配置文件,在 location ~ \.php(.*)$ { } 块内添加或覆盖以下三行(不能写在 server 块顶层,也不要在 include fastcgi.conf 后面):
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;
- 三个值建议一致(如 300),避免某一段先放弃
- 别设为 0 —— Nginx 不支持无限等待,会报配置错误
- 改完点「保存」后,必须点右上角「重载配置」,不是「重启 Nginx」
PHP-FPM 层必须同步放开限制
max_execution_time 只控制脚本层,而 request_terminate_timeout 是 FPM 进程级“硬杀”,它一旦触发,Nginx 就收不到任何响应,必 504。
以 CLI 为先的表单构建器,采用 BYOK 理念。通过JSON Schema 生成美观的 HTML 表单,使用您自己的 SMTP 服务器处理提交,存储响应...
- 进宝塔 → PHP → 设置 → 配置修改,改
max_execution_time = 300 - 再进「安装扩展」→「PHP-FPM 设置」→ 改
request_terminate_timeout = 300s(注意带单位s) - 这两项必须满足:
request_terminate_timeout ≥ max_execution_time,否则 PHP 进程先被 kill,Nginx 白等 - 改完必须「重启 PHP 服务」,光重载配置不生效;可用
ps aux | grep php-fpm确认进程启动时间已更新
别漏掉宝塔隐藏的「网站超时时间」开关
这个值在「网站设置」→「网站目录」选项卡最底部,叫「网站超时时间」,默认 60 秒。它优先级极高,会直接覆盖 Nginx 配置里的所有 timeout 指令。
- 哪怕你上面全调成 300,这里还是 60,照样 504
- 必须手动改成和
fastcgi_read_timeout一致(如 300),然后点「保存」 - 这个设置对当前 PHP 版本下所有共用该版本的站点生效,如果多个站混用,得按最长需求设
调完别急着跑业务,先写个 sleep.php(内容为 )验证;同时盯紧 /www/wwwlogs/你的站点.error.log,看报错里明确写的是 upstream timed out (read: ...) 还是 (connect: ...),才能准确定位哪一环卡住。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










