不能复用wordpress的location ~.php$配置,因其仅匹配root下php文件,而phpmyadmin在子目录时include路径易错乱,导致“primary script unknown”或404;必须用独立server块、显式root、精确fastcgi_param设置及严格权限控制。

不能直接把 phpMyAdmin 放进 WordPress 根目录,也不能用同一 server 块共用 root 路径 —— 否则会暴露敏感入口、触发权限绕过、甚至导致 403 Forbidden 或 502 Bad Gateway。
为什么不能复用 WordPress 的 location ~\.php$ 配置
WordPress 的 PHP 处理块通常只匹配 root 下的文件,而 phpMyAdmin 若放在子目录(如 /usr/share/nginx/html/phpmyadmin),其内部大量 include 和 require 会尝试加载上级路径的配置或临时文件。Nginx 默认不继承 fastcgi_param SCRIPT_FILENAME 的路径计算逻辑,容易让 $document_root 指向错误位置,最终报错 File not found 或 Primary script unknown。
常见错误现象:
- 访问
/phpmyadmin/显示空白页,Nginx error.log 中出现FastCGI sent in stderr: "Primary script unknown" - 点击登录后跳转到
/phpmyadmin/index.php?token=xxx却返回404 - 能打开登录页,但提交表单后提示
mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost'(其实是因配置未生效,仍走默认 MySQL 认证)
正确做法:独立 server 块 + 显式 root + 严格 location 分离
必须为 phpMyAdmin 单独定义一个 server 块,绑定专用域名(如 pma.example.com)或使用非公开路径(如 /_dbadmin/),并确保其 root 指向真实安装路径,不与 WordPress 共享变量。
实操建议:
- 把 phpMyAdmin 解压到独立路径,例如
/var/www/pma,而非/var/www/wordpress/phpmyadmin - 在
/etc/nginx/conf.d/pma.conf中写入完整 server 块,不要用include引用通用 fastcgi 配置(避免污染) - 显式设置
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;,配合alias或root精确控制路径解析 - 禁用所有非必要 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }
示例片段(适用于 Ubuntu/Debian,PHP-FPM socket 路径为 /run/php/php8.1-fpm.sock):
server {
listen 80;
server_name pma.example.com;
root /var/www/pma;
index index.php;
<pre class="brush:php;toolbar:false;">location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ ^/index\.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~ /\.ht {
deny all;
}}
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
权限与安全加固必须手动补全
Nginx 不会自动继承系统用户权限,www-data 或 nginx 用户若对 phpMyAdmin 目录无读取权,或 config.inc.php 权限过于宽松(如 644),就会触发拒绝访问或被扫描利用。
关键检查点:
- 执行
chown -R www-data:www-data /var/www/pma(确认 PHP-FPM 运行用户是www-data) - 确保
/var/www/pma/config.inc.php权限为600:chmod 600 /var/www/pma/config.inc.php - 删除安装脚本:
rm -f /var/www/pma/install/,否则会被爆破 - 在
config.inc.php中强制关闭危险功能:$cfg['Servers'][$i]['AllowNoPassword'] = false;、$cfg['LoginCookieValidity'] = 3600; - 如果用子路径(如
/_dbadmin)而非子域,需用alias替代root,且location必须以^~开头防止正则覆盖
HTTPS 和访问控制不能依赖插件
WordPress 插件无法保护 phpMyAdmin 的入口,它完全脱离 WP 生命周期运行。任何“限制后台访问”的插件对独立部署的 phpMyAdmin 无效。
真正有效的控制方式只有两种:
- Nginx 层 IP 白名单:
allow 203.0.113.42; deny all;(放在server或location内) - HTTP Basic Auth:
auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.pma-passwd;,配合htpasswd -c /etc/nginx/.pma-passwd admin创建凭据
注意:auth_basic 必须放在 location ~ \.php$ 块内才生效;若放在 server 块顶层,可能被 FastCGI 请求绕过。
最后提醒:phpMyAdmin 的 blowfish_secret 必须手动生成并填入 config.inc.php,长度至少 32 字符,不能留空 —— 否则登录页会直接报错 The configuration file now needs a secret passphrase (blowfish_secret),且这个值一旦设定就不能轻易改,否则所有已加密 cookie 失效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










