504 Gateway Timeout 根源是 Nginx 代理超时,需同步调大 proxy_read_timeout、PHP-FPM 的 request_terminate_timeout、phpMyAdmin 的 ExecTimeLimit 及 PHP 的 max_execution_time、post_max_size 和 upload_max_filesize。
phpMyAdmin 显示 504 Gateway Timeout,本质是 Nginx 代理超时了
不是 phpmyadmin 本身卡住,也不是 mysql 挂了,而是 nginx 在转发请求时等不及后端响应,主动断开连接并返回 504 gateway timeout。常见于导入大 sql 文件、执行慢查询或导出大量数据时。
实操重点:调高 Nginx 的代理超时参数,同时确认 PHP-FPM 和 phpMyAdmin 自身的限制不构成瓶颈。
-
proxy_read_timeout必须调大(默认 60 秒),它控制 Nginx 等待后端响应的最长时间 -
proxy_connect_timeout和proxy_send_timeout一般无需动,除非网络极差或上传巨量数据 - 修改位置在 Nginx 的 server 块或 location ~ \.php$ 块内,不是全局 http 块
PHP-FPM 的 request_terminate_timeout 会覆盖 Nginx 超时
即使 Nginx 放宽了 proxy_read_timeout,PHP-FPM 仍可能在 30 秒(默认值)后强行 kill 掉进程,导致 Nginx 最终收不到响应而报 504。这个值优先级高于 Nginx 设置。
检查你的 www.conf(路径类似 /etc/php/{version}/fpm/pool.d/www.conf),重点关注:
- 确认
request_terminate_timeout已取消注释,并设为足够大(如300秒)或设为0(禁用超时) - 同时检查
request_slowlog_timeout,避免误配成相同值触发慢日志干扰判断 - 改完必须重启 PHP-FPM:
sudo systemctl restart php{version}-fpm
phpMyAdmin 的 $cfg['ExecTimeLimit'] 是另一道关卡
这个配置是 phpMyAdmin 自己加的“软超时”,单位秒,默认 300(5 分钟)。它不依赖 PHP 或 Nginx,而是在脚本里用 set_time_limit() 控制的。如果这里比 Nginx 或 PHP-FPM 的限制还小,前面全白调。
编辑 phpMyAdmin 的配置文件 config.inc.php(通常在安装目录根下):
- 添加或修改:
$cfg['ExecTimeLimit'] = 0;(0表示不限制) - 不要写成
false或空字符串,phpMyAdmin 只认整数 - 该设置只影响 phpMyAdmin 内部操作(如导入、导出、搜索),不影响其他 PHP 脚本
别忘了检查 max_execution_time 和 post_max_size
PHP 的全局执行时间与上传大小限制,会在更底层拦截请求。比如导入 200MB 的 SQL,post_max_size 小于它,Nginx 根本不会把请求转给 PHP,而是直接 413;若 max_execution_time 是 30,哪怕其他都放开,PHP 解析 SQL 时也会被中断。
这些值需在 PHP 配置中统一调整(php.ini 或 FPM pool 的 php_admin_value):
-
max_execution_time = 300(或0) -
post_max_size = 512M(建议略大于最大 SQL 文件) -
upload_max_filesize = 512M(phpMyAdmin 导入依赖此值) - 改完同样要重启 PHP-FPM,
php.ini修改对 CLI 无效,但 phpMyAdmin 是 Web 请求,以 FPM 配置为准
真正容易被忽略的是:四个地方(Nginx、PHP-FPM、phpMyAdmin、PHP core)的超时和大小限制必须全部对齐,且最小的那个值起决定作用。调一个,漏一个,问题照旧。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











