phpMyAdmin 5.2 推荐通过 PMA_HOST 和 PMA_PORT 环境变量动态指定单连接目标,而非硬编码多服务器配置;开发用 'cookie' 认证,生产强制 'config' 并禁用登录页、错误提示与上报,且必须禁用空密码、缩短 session 有效期。

用 PMA_HOST 和 PMA_PORT 环境变量控制连接目标
phpMyAdmin 5.2 不再推荐在 config.inc.php 中硬编码多个服务器配置来区分环境,而是通过运行时环境变量动态指定连接目标。Docker 部署下最直接的方式是:开发环境用 -e PMA_HOST=localhost(指向宿主机 MySQL),生产环境则用 -e PMA_HOST=prod-db.internal(指向内网 DNS 域名)。端口也需显式传入,比如 -e PMA_PORT=3307,避免默认 3306 被防火墙拦截或复用冲突。
$cfg['Servers'][$i]['auth_type'] 必须按环境设为不同值
开发环境可设为 'cookie',允许临时登录;生产环境必须强制设为 'config' 并禁用登录页——否则会暴露数据库凭据在配置文件里,且无法绕过认证。若误设为 'http',Apache 的 Basic Auth 可能与反向代理冲突,导致 401 循环重定向。
- 开发:
$cfg['Servers'][$i]['auth_type'] = 'cookie'; - 生产:
$cfg['Servers'][$i]['auth_type'] = 'config'; $cfg['Servers'][$i]['user'] = 'pma_ro'; $cfg['Servers'][$i]['password'] = 'xxx'; - 两者都必须配
$cfg['Servers'][$i]['AllowNoPassword'] = false;,禁止空密码登录
多服务器下,$i 索引不能跨环境复用
如果你在 config 文件中手动写多个 $cfg['Servers'][1]、$cfg['Servers'][2],开发环境只启一个 DB,但生产环境启三个——那 [2] 和 [3] 在开发环境会报错“未定义 host”,phpMyAdmin 直接白屏。正确做法是:只保留一个 $i = 1; 块,用环境变量决定它连谁,而不是靠数组索引数量区分环境。
- 错误示范:
$cfg['Servers'][1]['host'] = 'dev-db'; $cfg['Servers'][2]['host'] = 'prod-db'; - 正确路径:统一用
$cfg['Servers'][$i]['host'] = $_ENV['PMA_HOST'] ?? 'localhost'; - 注意:
$_ENV默认不自动填充,需在 PHP-FPM 或 Apache 的env[...]配置中显式透传
生产环境必须关闭 $cfg['ShowHint'] 和 $cfg['SendErrorReports']
这两个开关在开发环境很有用,但生产环境开启等于主动泄露部署细节。比如 SendErrorReports = 'ask' 会在 SQL 报错时弹出“是否上报给 phpMyAdmin 团队”,而上报内容含完整 SQL 和表结构,极其危险。
立即学习“PHP免费学习笔记(深入)”;
-
$cfg['ShowHint'] = false;—— 隐藏所有“提示气泡”,防止前端泄露功能边界 -
$cfg['SendErrorReports'] = 'never';—— 彻底禁用错误上报通道 - 额外建议:
$cfg['LoginCookieValidity'] = 300;(5 分钟),缩短 session 生命周期
$cfg['Servers'][x],就等于放弃环境隔离能力。



















