phpmyadmin 在 nginx 反向代理后跳 http 而非 https,本质是其自身未感知真实协议,需通过 pma_absolute_uri 环境变量强制指定完整访问地址(含协议、域名、子路径),并配合 nginx 正确透传 host 和 x-forwarded-proto 头及配置 proxy_redirect 修正响应头。

直接说结论:phpMyAdmin 在 Nginx 反向代理后跳 http:// 而不是 https://,本质是它没感知到真实协议,且没正确拼接跳转 URL —— 不是 Nginx 配置漏了 SSL,而是 phpMyAdmin 自身不信任代理头、也不生成 HTTPS 地址。
phpMyAdmin 必须显式启用 HTTPS 感知
它默认只看 $_SERVER['HTTPS'] 或 $_SERVER['SERVER_PORT'],而反向代理后这两项仍是 off 和 80。Nginx 传了 X-Forwarded-Proto 没用,phpMyAdmin 不读。
- 在 phpMyAdmin 的
config.inc.php(或 Docker 环境下挂载的自定义配置)中,必须手动补上判断逻辑:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
- 如果用的是 Docker 官方镜像,更推荐用环境变量方式启动,避免改配置文件:
docker run -e PMA_ABSOLUTE_URI=https://yourdomain.com/phpmyadmin/ -e PMA_HOST=db ...
-
PMA_ABSOLUTE_URI是关键:它强制 phpMyAdmin 所有跳转、表单 action、JS 请求都基于这个完整 URL 构建,绕过协议探测逻辑
Nginx 的 proxy_set_header 必须透传协议和 Host
仅靠 proxy_pass 不够,phpMyAdmin 生成重定向时会依赖 Host 和协议信息。若 Nginx 没传对,它可能拼出 http://localhost/login 这类地址。
- 确保 location 块里有这三行(顺序不能错):
proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-For $remote_addr;
- 不要用
$http_host:它可能带:80或:443,phpMyAdmin 解析失败会 fallback 到 localhost - 如果 phpMyAdmin 部署在子路径(如
/phpmyadmin/),proxy_pass末尾必须带/,否则路径会被 double 编码
proxy_redirect 必须重写 Location 响应头
即使 phpMyAdmin 生成了 Location: http://127.0.0.1:8080/phpmyadmin/,Nginx 默认不会改——浏览器收到后直接跳内网地址,404 或拒绝连接。
- 加这条规则,把所有含协议的绝对跳转统一修正为当前访问协议 + 域名:
proxy_redirect ~^https?://[^/]+(/.*)$ $scheme://$host$1;
- 这条必须放在
proxy_pass之后才生效; - 如果 phpMyAdmin 返回的是相对路径(如
Location: /phpmyadmin/),这条不触发,也无需触发; - 别写死
proxy_redirect http://127.0.0.1:8080/ https://$host/—— Docker 动态 IP 或多实例时会失效
Docker 启动时漏掉 PMA_ABSOLUTE_URI 是最常见坑
很多教程只配 Nginx,却忘了 phpMyAdmin 容器本身需要知道“我在哪儿被访问”。不设 PMA_ABSOLUTE_URI,它就按 $_SERVER 里残缺的信息瞎猜,登录后点“执行”跳 404、点“数据库”跳回 HTTP,全是这个原因。
这个值必须包含协议、域名、子路径三部分,且结尾不带斜杠(https://example.com/phpmyadmin ✅,https://example.com/phpmyadmin/ ❌);Nginx location 路径要和它严格一致,否则 rewrite 规则或内部链接会错位。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











