504错误主因是nginx与php超时设置不匹配:需同步调整nginx的proxy_read_timeout等三项为300、php的max_execution_time为300、php-fpm的request_terminate_timeout为300s,并修改宝塔网站设置中“网站超时时间”为300,全部修改后重载配置并重启php服务。

宝塔面板里Nginx报504,先看proxy_read_timeout设没设够
504不是网站崩了,是Nginx等后端响应太久、主动放弃了。宝塔默认的proxy_read_timeout只有60秒,而PHP处理一个复杂请求(比如导出报表、调第三方API、查大表)很容易超时。
你得进宝塔 → 网站 → 设置 → 配置文件,在location ~ \.php$块外面、server块里加或改这几行:
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300;
注意:proxy_read_timeout必须和PHP的执行时间匹配,否则只调Nginx没用;别直接写在location里,否则可能不生效;改完点「保存」再点「重载配置」,别只重启Nginx。
PHP最大执行时间要同步拉高,重点检查max_execution_time和request_terminate_timeout
宝塔用的是PHP-FPM,它有两个超时开关:一个是PHP脚本自身的max_execution_time(ini里设),另一个是FPM进程级的request_terminate_timeout(更硬核,会直接kill掉PHP进程)。两者都得调,且后者必须 ≥ 前者,否则Nginx还没超时,PHP进程先被干掉了。
- 进宝塔 → PHP → 设置 → 配置修改,找到
max_execution_time = 300,改成300或更高 - 再点「安装扩展」→ 「PHP-FPM设置」→ 找到
request_terminate_timeout,填300s(注意带单位s) - 改完必须「重启PHP服务」,光重载配置不行
别漏掉宝塔自带的「网站超时时间」隐藏开关
宝塔界面有个容易被忽略的地方:网站设置 → 「网站目录」选项卡下,最底部有「网站超时时间」输入框,默认是60秒。这个值会覆盖Nginx配置里的超时逻辑,优先级很高。哪怕你上面全调对了,这里还是60,照样504。
- 把它改成和
proxy_read_timeout一致,比如300 - 改完记得点「保存」,这个操作不会自动重载,必须手动点右上角「重载配置」
- 这个值对所有PHP站点生效,如果多个站点混用同一PHP版本,要按最长需求设
调完别急着验证,先确认慢请求真来自PHP而不是数据库或网络
盲目拉高超时只是兜底,不是根治。如果每次504都发生在某个接口(比如/api/report/export),就该去看日志,而不是一味加时间。
- 查Nginx错误日志:
/www/wwwlogs/你的域名.error.log,搜upstream timed out - 查PHP慢日志:宝塔PHP设置里开启「显示慢日志」,路径通常是
/www/wwwlogs/php_slow.log,看是不是某条SQL或curl卡住 - 临时加一行
error_log("start", 4);和error_log("end", 4);到问题脚本里,确认是卡在哪一段
超时参数可以调到300甚至600,但超过这个数还稳不住,说明不是配置问题,是代码或依赖服务本身扛不住——这时候加时间只会让失败更安静,而不是更可靠。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











