PHPMyAdmin 必须完整配置在启用 SSL 的 server 块内(listen 443 ssl),不可仅存在于 HTTP 的 server 块中;certbot 续签会覆盖配置,需用 include 独立文件管理,并确保 SELinux 上下文与 PHP-FPM 权限正确。

nginx 配置中 phpMyAdmin 路径必须与 HTTPS 重定向共存
直接复用 HTTP 下的 /phpmyadmin location 块,但未适配 HTTPS 的 listen 443 ssl 上下文,会导致 404 或 502。关键不是“能不能加”,而是“加在哪”——所有 location 必须放在启用 SSL 的 server 块内,不能只写在 HTTP 的 server { listen 80 } 里。
常见错误是:把 phpMyAdmin 的 location 写在默认 server(监听 80)里,然后另起一个 server { listen 443 ssl } 却没复制这部分,结果 HTTPS 访问 /phpmyadmin 时 nginx 根本不识别路径。
- 确认你的证书配置(
ssl_certificate、ssl_certificate_key)和listen 443 ssl在同一个server块中 - 把整个 phpMyAdmin 的
location块(包括alias和~ \.php$处理)完整复制进该server块 - 避免在两个
server块中用相同root或alias指向不同路径,否则 PHP-FPM 可能因SCRIPT_FILENAME解析错位报 500
certbot 自动续签时 phpMyAdmin 的 alias 路径容易被覆盖
使用 certbot --nginx 自动配置 HTTPS 时,certbot 会重写整个 server 块,把你手动添加的 phpMyAdmin location 全部删掉。这不是 bug,是 certbot 的设计逻辑:它只管理它自己生成的配置,不合并自定义块。
如果你依赖 certbot 续签(推荐),必须把 phpMyAdmin 配置抽离成独立文件并 include 进去,否则每次 certbot renew 后都要手动补回。
立即学习“PHP免费学习笔记(深入)”;
- 新建
/etc/nginx/conf.d/phpmyadmin-https.conf - 把 phpMyAdmin 的全部
location写入该文件 - 在启用 HTTPS 的
server块末尾添加:include /etc/nginx/conf.d/phpmyadmin-https.conf; - 运行
nginx -t && systemctl reload nginx验证
PHP-FPM 的 socket 权限在 HTTPS 下更敏感
HTTP 和 HTTPS 共用同一套 PHP-FPM 服务,但 HTTPS 请求常因 SELinux 或用户权限问题卡在 connect() to unix:/var/run/php-fpm/php-fpm.sock failed。CentOS 7/8 默认启用 SELinux,而 certbot 或手动配置可能没触发相关策略更新。
现象是:首页能打开,但点任意操作(如登录、执行 SQL)就 502;或直接提示 “No input file specified.” —— 这基本等于 PHP-FPM 没接到请求,或接到了但找不到文件。
- 检查
fastcgi_pass地址是否与/etc/php-fpm.d/www.conf中的listen完全一致(注意路径、权限、SELinux 上下文) - 运行
ls -Z /var/run/php-fpm/,确认php-fpm.sock的 SELinux 类型是httpd_var_run_t,不是unlabeled_t;若不对,执行:sudo semanage fcontext -a -t httpd_var_run_t "/var/run/php-fpm(/.*)?" && sudo restorecon -Rv /var/run/php-fpm - 确保
www.conf中user和group是nginx(不是apache或php-fpm),且listen.owner/.group与之匹配
phpMyAdmin 自身不校验证书,但浏览器会拦截混合内容
phpMyAdmin 页面里如果硬编码了 http:// 资源(比如 logo、JS、CSS 链接),在 HTTPS 页面中加载会被现代浏览器主动阻止(Mixed Content),导致界面错乱或功能失效。这不是 nginx 或证书的问题,而是 phpMyAdmin 配置或模板里的协议写死。
典型表现:页面左上角显示不安全警告,F12 控制台出现 Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure script 'http://...'。
- 检查
/usr/share/phpMyAdmin/config.inc.php中是否有$cfg['PmaAbsoluteUri'] = 'http://...';,必须改为https://或留空(推荐留空,让 phpMyAdmin 自动推断) - 禁用所有非必要插件或自定义主题,它们可能引入外部 HTTP 请求
- 在 nginx 的 phpMyAdmin
location块中添加响应头强制升级:add_header Content-Security-Policy "upgrade-insecure-requests";



















