phpMyAdmin 配置文件被 Nginx 忽略的主因是 root/alias 混用及 SCRIPT_FILENAME 构造错误,导致 config.inc.php 加载失败;须将 phpMyAdmin 置于 Nginx root 下、禁用 alias、显式设置 fastcgi_param SCRIPT_FILENAME,并确保 config.inc.php 权限为 644、与 index.php 同级且不可写。
phpMyAdmin 配置文件被 Nginx 忽略的典型表现
访问 / 时跳转到 phpmyadmin 登录页但报错 wrong permissions on configuration file, should not be writable.,或根本加载不到 config.inc.php —— 这说明 nginx 没把请求正确转发给 php,或者 php 根本没读到你改的配置文件。
根本原因不是 phpMyAdmin 本身,而是 Nginx 的 root 和 alias 混用、PHP-FPM 的 SCRIPT_FILENAME 构造错误,导致 config.inc.php 被 PHP 从错误路径加载(比如空文件、系统默认模板、甚至 403 拒绝读取)。
- 确保 phpMyAdmin 解压后放在 Nginx
root目录下(如/var/www/html/),而不是用alias映射到子目录 - 不要把 phpMyAdmin 放在
/usr/share/phpmyadmin后再靠alias /phpmyadmin /usr/share/phpmyadmin—— 这会让config.inc.php的相对路径失效 - 检查 PHP-FPM 的
security.limit_extensions是否包含.php,否则config.inc.php可能被当成静态文件返回
让 Nginx 把根域名请求直接交给 phpMyAdmin 处理
这不是“重定向”,而是让 http://your-domain.com/ 的所有请求(包括 /、/index.php、/js/...)都由 phpMyAdmin 的入口逻辑响应。关键在 location 块的匹配顺序和 fastcgi_param 设置。
- 用
location / { ... }匹配全部请求,内部用try_files $uri $uri/ /index.php?$query_string;确保静态资源直出、PHP 请求进index.php - 必须显式设置
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;—— 很多人漏掉这行,导致 PHP 加载的是/index.php,但实际想加载的是/var/www/html/index.php - 如果 phpMyAdmin 是软链接(比如
/var/www/html -> /opt/phpmyadmin),Nginx 默认不跟随符号链接,需加disable_symlinks off;或改用真实路径
覆盖默认 config.inc.php 的三个硬性条件
phpMyAdmin 启动时只认一个 config.inc.php:它必须存在、可读、不能被写入(权限 ≤ 0644)、且路径在 phpMyAdmin 安装根目录下。任何“外部配置”或“环境变量注入”都不生效。
-
config.inc.php必须和index.php在同一级目录,不能放在./conf/或../config/ - 文件权限必须是
644(chmod 644 config.inc.php),且属主为 web 用户(如www-data或nginx),否则会触发安全拒绝 - 配置里不要用
require_once动态引入其他 PHP 文件 —— phpMyAdmin 不执行它们,只会读取config.inc.php顶层定义的变量 - 示例最小有效配置:
$cfg['blowfish_secret'] = 'a-32-char-random-string-here';<br>$cfg['Servers'][1]['host'] = 'localhost';<br>$cfg['Servers'][1]['auth_type'] = 'cookie';
为什么改了 Nginx 配置却还是走 Debian/Ubuntu 默认页面
常见于用包管理器安装的 phpMyAdmin(如 apt install phpmyadmin),它会自动生成 /etc/nginx/conf.d/phpmyadmin.conf 并启用,而你的主配置可能被它覆盖或优先级更低。
立即学习“PHP免费学习笔记(深入)”;
- 运行
nginx -T | grep -A5 "server.*your-domain"查看实际生效的 server 块,确认你的配置是否被加载 - 检查
/etc/nginx/sites-enabled/下是否有000-default或phpmyadmin类似文件,它们可能用location /phpmyadmin拦截了请求 - Debian 系默认把 phpMyAdmin 安装到
/usr/share/phpmyadmin,并用alias挂载 —— 这和“根目录直访”冲突,必须删掉相关配置并手动部署 - 重启后用
curl -I http://your-domain.com/看Server和X-Powered-By头,确认是否真由你配的 Nginx + PHP 处理
最易被忽略的一点:phpMyAdmin 的 $cfg['PmaAbsoluteUri'] 如果写死为 http://localhost/phpmyadmin/,即使 Nginx 做了根目录映射,前端 JS 和表单提交仍会跳回带路径的 URL —— 这个变量必须留空或设为 '',让 phpMyAdmin 自动推导。



















