phpMyAdmin在Nginx下404或无法访问的根本原因是Nginx未正确配置location块处理/phpmyadmin路径及PATH_INFO传递,必须用root+显式SCRIPT_FILENAME而非alias,并确保权限、SELinux策略、PHP扩展和伪静态规则顺序正确。
phpMyAdmin 在 Nginx 下 404 或无法访问
根本原因是 nginx 默认不处理 /phpmyadmin 这类非根路径的 php 路由,且未正确传递 path_info。apache 的 .htaccess 自动生效,nginx 没有等价机制,必须手动配 location 块。
- 确保 phpMyAdmin 已解压到 Web 可访问目录(如
/usr/share/phpMyAdmin),且 Nginx 用户(通常是nginx)有读取权限 - 不要用
alias指向 phpMyAdmin 目录——它会导致SCRIPT_FILENAME构造错误,PHP 找不到入口文件 - 必须用
root+location匹配,再显式指定fastcgi_param SCRIPT_FILENAME - 关键参数不能少:
fastcgi_param PATH_INFO $fastcgi_path_info,否则多级路由(如/phpmyadmin/import.php)会失败
location /phpmyadmin {
root /usr/share/;
index index.php;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
LNMP 中 phpMyAdmin 登录后跳转空白或报 500
常见于 PHP-FPM 配置与 phpMyAdmin 版本不兼容,尤其是 open_basedir 限制或缺少必要扩展。
- 检查
php -m | grep -E 'mbstring|mcrypt|openssl|json'—— CentOS 7 默认 PHP 7.2+ 已移除mcrypt,需改用libsodium或降级适配;新版 phpMyAdmin(5.0+)已弃用 mcrypt -
open_basedir若启用,必须包含 phpMyAdmin 所在路径和临时目录(如/tmp:/usr/share/phpMyAdmin:/var/lib/php/session) - 确认
session.save_path指向的目录存在、可写,且属主为nginx或php-fpm运行用户 - 查看
/var/log/php-fpm/www-error.log,真实错误常是Undefined function mb_detect_encoding(),说明mbstring扩展未加载
伪静态导致 phpMyAdmin 子目录链接失效
如果你在站点根目录配置了 Laravel/WordPress 类伪静态规则(如 try_files $uri $uri/ /index.php?$query_string),它会覆盖 phpMyAdmin 的 location 块,导致所有请求被扔给 index.php 处理。
- phpMyAdmin 的
location块必须放在主location /之前,Nginx 按顺序匹配,越精确越靠前 - 禁止在 phpMyAdmin location 内套用
try_files主规则——它不需要重写,只要能准确命中 PHP 文件即可 - 若用符号链接部署(如
/var/www/html/phpmyadmin → /usr/share/phpMyAdmin),需在 Nginx 配置中开启disable_symlinks off;,否则 403
CentOS 7 SELinux 导致 phpMyAdmin 无法读取配置或写入 tmp
SELinux 默认阻止 Nginx 访问非标准路径(如 /usr/share/phpMyAdmin)和写入临时文件,现象是登录页空白、导入失败、配置保存提示“无法写入 config.inc.php”。
- 临时验证:运行
setenforce 0,如果立刻正常,就是 SELinux 拦截 - 永久放行:执行
semanage fcontext -a -t httpd_sys_content_t "/usr/share/phpMyAdmin(/.*)?",再restorecon -Rv /usr/share/phpMyAdmin - 若需上传/导入功能,还需放行 tmp:
semanage fcontext -a -t httpd_tmp_t "/tmp/phpMyAdmin.*",然后restorecon -v /tmp/phpMyAdmin.* - 别直接关 SELinux——生产环境应调策略,不是关开关
最麻烦的其实是路径权限和 SELinux 策略的组合问题,改完配置不 reload nginx、没清浏览器缓存、或者 php-fpm 进程没重启,都会让调试变成猜谜。盯住 /var/log/nginx/error.log 和 journalctl -u php-fpm -n 50,比反复改配置有用得多。
立即学习“PHP免费学习笔记(深入)”;



















