根本原因是Apache 2.4+默认仅允许127.0.0.1和::1访问/phpmyadmin路径,远程请求被Require ip规则直接拒绝;需修改/etc/httpd/conf.d/phpMyAdmin.conf中的Require指令放行对应IP或网段,并重载httpd服务。

phpMyAdmin 在 Rocky Linux 9 上报 “403 Forbidden” 或 “Access denied” 错误,根本原因几乎总是 Apache 的访问控制策略拒绝了对 /phpmyadmin 路径的请求,而不是数据库凭据问题。
为什么默认安装后打不开 phpMyAdmin?
Rocky Linux 9 使用 Apache 2.4+,其 /etc/httpd/conf.d/phpMyAdmin.conf 文件中默认启用了严格访问限制:只允许来自 127.0.0.1 和 ::1 的本地请求。如果你从其他 IP(比如宿主机、局域网电脑)访问,Apache 直接返回 403,连登录页面都不会显示。
常见现象包括:
- 浏览器显示
Forbidden You don't have permission to access this resource. - Apache 错误日志(
/var/log/httpd/error_log)里出现类似client denied by server configuration: /usr/share/phpmyadmin/ - 能 ping 通服务器、HTTP 服务正常,但
http://IP/phpmyadmin就是打不开
修改 httpd 配置允许指定 IP 访问
编辑配置文件,把 Require ip 规则扩展为你实际使用的客户端 IP 或网段:
sudo vim /etc/httpd/conf.d/phpMyAdmin.conf
找到类似下面这段(通常在 块内):
<requireany>
Require ip 127.0.0.1
Require ip ::1
</requireany>
替换成你的真实访问来源,例如:
- 允许整个局域网(如 192.168.1.0/24):
Require ip 192.168.1.0/24 - 允许单个远程 IP:
Require ip 192.168.1.100 - 临时测试(不推荐生产环境):
Require all granted(注意:这会开放给任意 IP)
改完保存,重载 Apache:
sudo systemctl reload httpd
确认 SELinux 是否拦截了访问
Rocky Linux 9 默认启用 SELinux,它可能阻止 Apache 读取 phpMyAdmin 的文件或连接网络(比如连远程 MySQL)。先检查是否是 SELinux 导致:
sudo ausearch -m avc -ts recent | grep phpmyadmin
如果看到大量 AVC 拒绝记录,临时放行测试:
- 允许 Apache 访问 phpMyAdmin 目录:
sudo setsebool -P httpd_read_user_content on - 允许 Apache 连远程数据库(如果 phpMyAdmin 连的是非本地 MySQL):
sudo setsebool -P httpd_can_network_connect_db on
注意:不要盲目执行 setenforce 0 关闭 SELinux —— 这掩盖问题而非修复,且重启后失效。
检查 phpMyAdmin 配置中的可信代理与 Referer 校验
phpMyAdmin 自身也做安全校验。如果用反向代理(如 Nginx 前置),或通过域名访问但没配好 Host 头,它可能因 $cfg['Servers'][$i]['AllowRoot'] 或 $cfg['CheckConfigurationPermissions'] 触发静默拒绝。
关键检查点:
- 确认
/etc/phpmyadmin/config.inc.php中没有误设$cfg['Servers'][$i]['host'] = 'localhost'却试图连远程库(应填真实 IP 或域名) - 若使用 HTTPS 反代,确保
$cfg['ForceSSL'] = true且代理正确传了X-Forwarded-Proto - 临时注释掉
$cfg['Servers'][$i]['auth_type'] = 'cookie'后面的blowfish_secret行(仅测试),看是否跳过登录直接进——可判断是否卡在认证流程前
权限错误往往卡在 Apache 层,而不是 PHP 或 MySQL 层;先确认 URL 能加载出登录页,再排查登录失败。
最易被忽略的是:改完 phpMyAdmin.conf 后忘记 systemctl reload httpd,或者改了 SELinux 布尔值但没加 -P 参数导致重启失效。每次调整只动一个变量,观察日志变化,比同时改三处更可靠。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











