CentOS Stream 9 上 phpMyAdmin 远程访问失败主因是 Apache Require 指令未显式放行、SELinux 阻断数据库连接、MySQL host 配置为 localhost 导致解析失败,以及 phpMyAdmin 目录权限不足;需分别替换 Require all granted、启用 httpd_can_network_connect_db 布尔值、将 host 改为 127.0.0.1、并设 root:apache 属组与 750 权限。

phpMyAdmin 在 CentOS Stream 9 上默认不允许远程访问,且 Apache 用户(apache)对配置目录无写权限,直接访问会报 403 或空白页——这不是安装失败,而是权限链没打通。
Apache 配置文件中 Require 指令必须显式放行
CentOS Stream 9 的 httpd 默认启用严格访问控制,即使你把 phpMyAdmin.conf 放进 /etc/httpd/conf.d/,若不明确授权,所有请求都会被拒。
- 编辑
/etc/httpd/conf.d/phpMyAdmin.conf,找到所有<directory></directory>块(通常有两处:主目录和setup子目录) - 把旧式
Order Allow,Deny+Allow from all全部删掉,换成现代语法:Require all granted - 如果只允许内网访问,用更安全的写法:
Require ip 192.168.1.0/24或Require ip 10.0.0.5 - 别漏掉
<directory></directory>这个块——它常被忽略,导致 setup 页面打不开或 403
SELinux 策略必须手动开启网络连接能力
CentOS Stream 9 默认启用 SELinux enforcing 模式,apache 进程默认不能发起数据库连接(connect 到 localhost:3306),即使 MySQL 在本机,也会卡在登录页或报“Cannot log in to the MySQL server”。
- 运行命令启用必要布尔值:
sudo setsebool -P httpd_can_network_connect_db 1 - 如果还连不上,检查是否还需
httpd_can_network_connect(仅当 phpMyAdmin 需要访问远程 DB 时才开,不推荐) - 验证是否生效:
getsebool httpd_can_network_connect_db应返回on - 不要禁用 SELinux(
setenforce 0或改config),那等于裸奔
config.inc.php 中的 $cfg['Servers'][$i]['host'] 不能写 localhost
MySQL 8 默认启用 skip-name-resolve,而 phpMyAdmin 若用 'localhost' 作为 host,PHP 会尝试走 Unix socket;但实际连接逻辑可能 fallback 到 TCP,再因 DNS 解析失败或 socket 权限问题中断。
立即学习“PHP免费学习笔记(深入)”;
- 打开
/etc/phpMyAdmin/config.inc.php(或/usr/share/phpmyadmin/config.inc.php) - 定位到
$cfg['Servers'][$i]['host']行,改为:$cfg['Servers'][$i]['host'] = '127.0.0.1'; - 同时确认
$cfg['Servers'][$i]['port'] = '3306';明确指定端口,避免隐式行为 - 若 MySQL 绑定的是
127.0.0.1而非*,这个改动就是必须的;否则连接会超时
phpMyAdmin 目录属主和权限容易被忽略
从 EPEL 安装的 phpMyAdmin 包,其文件属主是 root:root,而 Apache 进程以 apache 用户运行,无法读取某些配置文件(如 blowfish_secret 自动生成逻辑依赖可写权限)。
- 确保关键目录可读:
sudo chown -R root:apache /usr/share/phpmyadmin - 设最小必要权限:
sudo chmod -R 750 /usr/share/phpmyadmin - 特别加固:
sudo chmod 640 /usr/share/phpmyadmin/config.inc.php(防止 Web 暴露配置) - 若用了
setup工具生成配置,记得把生成的config.inc.php移到/etc/phpMyAdmin/并删掉/usr/share/phpmyadmin/config/目录,避免误触发
最常卡住的地方不是哪一步没做,而是 SELinux + MySQL host 解析 + Apache Require 三者叠加失效——单独看都正常,合起来就 500 或白屏。建议按顺序逐项验证,每改一项就 sudo systemctl reload httpd 并用 curl -I http://localhost/phpmyadmin/ 快速测状态码。



















