根本原因是Nginx、PHP-FPM、phpMyAdmin三者超时参数未对齐且PATH_INFO路由失败,导致fastcgi_read_timeout过小引发“假404”;需同步调大三端超时值至300秒,拆分location精确匹配PHP脚本并正确配置SCRIPT_FILENAME绝对路径、PATH_INFO传递及open_basedir限制。

根本原因不是FastCGI本身,而是Nginx、PHP-FPM、phpMyAdmin三者间超时参数未对齐,且PATH_INFO路由失败引发隐式重试或阻塞。
fastcgi_read_timeout太小导致“假404”
phpMyAdmin点击数据库结构页(如 /phpmyadmin/database/structure/?db=test)时,实际由 index.php 统一入口处理,但需正确解析 PATH_INFO。若 fastcgi_read_timeout 过小(如默认60秒),而机械硬盘上 session 文件读取或 SQL 查询稍慢,PHP-FPM 尚未返回响应,Nginx 就主动断连——此时浏览器可能收到 404(因重写规则失效后 fallback 到静态路径)或 504,具体取决于 location 匹配顺序和 try_files 行为。
- 典型现象:刷新一次变正常、偶发、仅出现在结构/导入/导出等耗时操作
- 必须同步检查三项:Nginx 的
fastcgi_read_timeout、PHP-FPM 的request_terminate_timeout、PHP 的max_execution_time - 推荐值:三者至少一致,建议设为
300(5分钟),避免 Nginx 先于 PHP-FPM 断连
location块未分离导致PATH_INFO丢失
只配一个 location /phpmyadmin/ 并用 fastcgi_pass 处理全部子路径,会导致 /phpmyadmin/database/structure/ 这类请求被错误地当作静态路径尝试查找,或 $fastcgi_script_name 解析成 /phpmyadmin/database/structure/(非 .php),最终 SCRIPT_FILENAME 拼出不存在的文件路径,PHP-FPM 不处理,Nginx fallback 到 404。
- 必须拆成两个独立
location:location /phpmyadmin/(只走try_files $uri =404,服务静态资源)location ~ ^/phpmyadmin/(.*\.php)$(专供 PHP,启用fastcgi_split_path_info) - 在 PHP location 中,
fastcgi_param SCRIPT_FILENAME必须用绝对路径,例如/usr/share/phpmyadmin/$fastcgi_script_name,不能依赖$document_root - 漏掉
fastcgi_param PATH_INFO $fastcgi_path_info,phpMyAdmin 就无法识别/database/structure/这段路径,直接跳转首页或报错
session.save_path不可写或权限不对触发阻塞
phpMyAdmin 登录后大量依赖 session。若 session.save_path 指向 /var/lib/php/sessions 但目录不存在、属主不是 www-data(或 nginx 用户)、或磁盘满,PHP 在启动 session 时会卡住,直到超时——这比 SQL 查询更隐蔽,且不报明显错误。
立即学习“PHP免费学习笔记(深入)”;
- 检查命令:
php -i | grep session.save_path,然后ls -ld看目录权限与磁盘空间 - Nginx 配置中应显式加
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/phpmyadmin/:/tmp/",否则 session 写入可能被 open_basedir 拦截 - 临时验证:在
config.inc.php中加$cfg['Servers'][$i]['auth_type'] = 'cookie';并禁用blowfish_secret,看是否仍卡在登录后跳转
最容易被忽略的是:PATH_INFO 路由失败时,phpMyAdmin 不会报错,而是静默 fallback 到首页或空响应;而超时参数不匹配时,日志里只有 upstream timed out,没有明确指向 phpMyAdmin。必须同时查 Nginx error log、PHP-FPM slow log 和 strace -p $(pgrep php-fpm) 才能定位真实瓶颈。



















