RHEL 8 上 phpMyAdmin 必须通过 php-fpm + proxy_fcgi 运行,不能用 DocumentRoot 直连;需安装并启用 php-fpm、加载 proxy_fcgi 模块、配置 Alias 与 SetHandler、补全 PHP 扩展、设置 blowfish_secret,并处理 SELinux 布尔值和上下文。

直接在 RHEL 8 上用 DocumentRoot 指向 phpMyAdmin 目录并启用 mod_php 是行不通的——RHEL 8 默认不提供 libphp.so,php -v 显示 CLI 模式正常不代表 Apache 能执行 PHP,必须走 php-fpm + proxy_fcgi 这条链路。
确认 php-fpm 已安装并监听正确地址
RHEL 8 的 PHP 不再嵌入 Apache,而是作为独立服务运行。若跳过这步,后续所有配置都会返回 503 或下载 PHP 源码。
- 检查是否已安装:
sudo dnf list installed php-fpm;未安装则运行sudo dnf install php-fpm - 确认
php-fpm服务已启动:sudo systemctl is-active php-fpm应返回active - 默认监听地址是
127.0.0.1:9000(TCP)或/run/php-fpm/www.sock(Unix socket)。生产环境推荐 socket,更安全且略快;若用 TCP,需确保listen = 127.0.0.1:9000在/etc/php-fpm.d/www.conf中未被注释,且listen.allowed_clients = 127.0.0.1 - SELinux 下若用 socket,需确保上下文为
httpd_var_run_t:sudo semanage fcontext -a -t httpd_var_run_t "/run/php-fpm(/.*)?",然后sudo restorecon -Rv /run/php-fpm
启用 proxy_fcgi 并配置虚拟主机 Alias
Apache 必须能将 .php 请求转发给 php-fpm,不能依赖旧式 AddHandler 或 SetHandler。
- 确认模块已加载:
sudo httpd -M | grep -E "(proxy|fcgi)"应输出proxy_module和proxy_fcgi_module;若无,编辑/etc/httpd/conf.modules.d/00-proxy.conf,取消以下两行注释:LoadModule proxy_module modules/mod_proxy.so、LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so - 不要在全局配置中写
ProxyPassMatch,应在虚拟主机内用Alias+<filesmatch></filesmatch>组合,避免影响其他站点 - 典型配置(保存为
/etc/httpd/conf.d/phpmyadmin.conf):
<Alias /phpmyadmin "/usr/share/phpmyadmin">
<Directory "/usr/share/phpmyadmin">
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</Directory>
</Alias>
注意:SetHandler "proxy:fcgi://127.0.0.1:9000" 是关键,不是 fcgi://...(少一个 proxy: 前缀会导致 500 错误);若改用 socket,写成 SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
立即学习“PHP免费学习笔记(深入)”;
验证 phpMyAdmin 所需 PHP 扩展是否启用
phpMyAdmin 启动失败常因扩展缺失,但错误日志里只报“空白页”或 500,不会明说缺哪个扩展。
- 检查
php-fpm加载的扩展:sudo php-fpm -m | grep -E "(mysqli|mbstring|zip|gd|curl|xml)";RHEL 8 默认不装php-mbstring和php-xml,必须手动补全:sudo dnf install php-mbstring php-xml php-zip php-gd php-curl - 确认
blowfish_secret已配置:编辑/usr/share/phpmyadmin/config.inc.php,在$cfg['Servers'][$i]['auth_type'] = 'cookie';上方添加:$cfg['blowfish_secret'] = '随机32位字符串';(不设会导致登录页无限重定向) - PHP 配置中
upload_max_filesize和post_max_size若小于 2M,导入大 SQL 会静默失败;建议统一设为64M并重启php-fpm
SELinux 和防火墙的隐性拦截点
即使配置全对,SELinux 也会默默拒绝 httpd 连接 php-fpm 或访问 /usr/share/phpmyadmin,现象是 403 或 503,journalctl -u httpd 里却看不到明显报错。
- 临时测试是否 SELinux 导致:运行
sudo setenforce 0,再试访问;若恢复,说明是策略问题 - 永久放行(推荐):
sudo setsebool -P httpd_can_network_connect 1(允许 Apache 建立网络连接),sudo setsebool -P httpd_can_network_connect_db 1(若 phpMyAdmin 需直连数据库) - 确认
/usr/share/phpmyadmin目录 SELinux 类型正确:ls -Z /usr/share/phpmyadmin | head -1应含httpd_sys_content_t;若不是,运行:sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/phpmyadmin(/.*)?",再sudo restorecon -Rv /usr/share/phpmyadmin - 防火墙只需放行 HTTP(80)或 HTTPS(443),
php-fpm在本地通信,无需额外开放 9000 端口
最易忽略的是 blowfish_secret 未设和 SELinux 的 httpd_can_network_connect 布尔值为 off——这两个点不解决,其他所有配置都白搭。



















