不能用dnf install phpmyadmin安装到自定义目录,因其RPM包路径硬编码为/usr/share/phpmyadmin,且自动配置Apache、SELinux和systemd,与自定义路径冲突;应手动下载解压、配置Nginx+PHP-FPM、初始化config.inc.php并禁用setup目录。

不能直接用 dnf install phpmyadmin 安装到自定义目录——官方仓库的 RPM 包硬编码了路径(如 /usr/share/phpmyadmin),且会自动注册 Apache 配置、SELinux 上下文和 systemd 单元,与你手动指定的路径冲突。
为什么不用包管理器安装 phpMyAdmin
Rocky Linux 9 的 phpmyadmin RPM 包:
- 安装路径固定为 /usr/share/phpmyadmin,不可通过 --prefix 或配置覆盖;
- 依赖 httpd(而非 nginx),若你用 Nginx + PHP-FPM,它还会悄悄改写 /etc/httpd/conf.d/phpMyAdmin.conf,引发服务冲突;
- 自动启用 SELinux 类型 httpd_sys_content_t,但只作用于默认路径,你的自定义目录不会被标记,访问时直接 403;
- 没有提供 php-fpm socket 路径配置项,Nginx 的 fastcgi_pass 得手动补全,容易漏。
下载并解压到目标目录(例如 /data/wwwroot/phpmyadmin)
用 wget 直接拉官方最新稳定版(避免镜像站版本滞后或篡改):
cd /data/wwwroot wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz tar -xzf phpMyAdmin-5.2.1-all-languages.tar.gz mv phpMyAdmin-5.2.1-all-languages phpmyadmin chown -R www:www phpmyadmin chmod -R 755 phpmyadmin
注意:
- 不要解压到 /var/www/html 或 /usr/share/nginx/html 这类默认 Web 根目录,否则可能被其他服务覆盖或误删;
- www 是你 PHP-FPM 实际运行的用户(非 nginx 用户),确保该用户对 phpmyadmin/tmp 和 phpmyadmin/config.inc.php 有读写权;
- 必须运行 chmod -R 755,因为部分发行版 tar 包里文件权限是 600,Nginx worker 进程无法读取。
配置 Nginx location 块并适配 PHP-FPM
在你的站点 server 块内加一段,指向自定义路径:
location /phpmyadmin {
alias /data/wwwroot/phpmyadmin/;
index index.php;
<pre class="brush:php;toolbar:false;">location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass 127.0.0.1:8300; # 改成你实际的 PHP-FPM 端口(如 7300/8300)
fastcgi_intercept_errors off;
}
location ~ ^/phpmyadmin/(.+\.php)$ {
alias /data/wwwroot/phpmyadmin/$1;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass 127.0.0.1:8300;
}
}
关键点:
- 用 alias(不是 root),否则 /phpmyadmin/index.php 会拼成 /data/wwwroot/phpmyadmin/phpmyadmin/index.php;
- 必须有两个 location ~ \.php$ 块:一个处理根级 PHP 请求,一个处理子路径嵌套请求(比如 /phpmyadmin/libraries/common.inc.php);
- fastcgi_param SCRIPT_FILENAME $request_filename 是核心,$document_root$fastcgi_script_name 在 alias 下会错位。
初始化 config.inc.php 并禁用 setup
复制模板并设权限:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
cd /data/wwwroot/phpmyadmin cp config.sample.inc.php config.inc.php chown www:www config.inc.php chmod 600 config.inc.php
编辑 config.inc.php,至少改三处:
-
$cfg['blowfish_secret'] = '随机32位字符串';(不设会导致登录页报错) -
$cfg['Servers'][$i]['auth_type'] = 'cookie';(推荐,避免明文存密码) -
$cfg['Servers'][$i]['host'] = '127.0.0.1';(不要用localhost,MySQL 8+ 默认跳过 socket 认证)
最后删掉或重命名 /data/wwwroot/phpmyadmin/setup 目录——这个入口一旦暴露,任何人都能改全局配置,生产环境必须禁用。
整个过程最易忽略的是 SCRIPT_FILENAME 的拼接逻辑和 SELinux 上下文。即使 Nginx 配置全对,若没运行 semanage fcontext -a -t httpd_sys_content_t "/data/wwwroot/phpmyadmin(/.*)?" && restorecon -Rv /data/wwwroot/phpmyadmin,依然会卡在 403。别跳过这步。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










