必须让 phpMyAdmin 走 HTTPS,这是安全底线;LNMP 下由 Nginx 终止 SSL,需正确配置 listen 443 ssl、证书路径、server_name,并设置 fastcgi_param HTTPS on 和 session.cookie_secure=1,同时禁用 HTTP 访问。

必须让 phpMyAdmin 走 HTTPS,否则登录凭据明文传输,等同于裸奔。这不是可选项,是安全底线。LNMP 架构下,SSL/TLS 加密由 Nginx 统一终止,phpMyAdmin 本身不处理证书,只依赖 Nginx 的 HTTPS 代理和正确转发。
确保 Nginx 已启用并验证 SSL 配置
phpMyAdmin 的 HTTPS 访问完全依赖上游 Nginx 的 443 server 块是否生效。如果 Nginx 还没配好 SSL,phpMyAdmin 就不可能被安全访问。
- 运行
nginx -t确认配置无语法错误,且listen 443 ssl指令已启用 - 检查
ssl_certificate和ssl_certificate_key路径是否真实存在、权限为644(证书)和600(私钥),Nginx 用户(如www-data或nginx)必须有读取权限 - 确认
server_name匹配你实际访问 phpMyAdmin 的域名(例如phpmyadmin.example.com或example.com),不能只写localhost - 若用 Let’s Encrypt,证书路径通常是
/etc/letsencrypt/live/example.com/fullchain.pem和/etc/letsencrypt/live/example.com/privkey.pem,别手误写成cert.pem或漏掉fullchain
phpMyAdmin 必须通过 HTTPS 协议生成链接与会话
即使 Nginx 443 端口开着,phpMyAdmin 默认仍可能生成 http:// 链接(比如登录跳转、表单提交地址),导致混合内容或重定向失败。
- 编辑 phpMyAdmin 根目录下的
config.inc.php,添加或修改:$cfg['PmaAbsoluteUri'] = 'https://your-domain.com/phpmyadmin/';(末尾斜杠不能少) - 若使用 cookie 认证(推荐),
$cfg['Servers'][$i]['auth_type'] = 'cookie';必须配合$cfg['blowfish_secret']设置非空字符串,否则登录页直接报错“配置文件现在需要绝密的短语密码” - 检查 PHP 的
session.cookie_secure是否开启:在php.ini中设为On,或在 phpMyAdmin 的config.inc.php顶部加ini_set('session.cookie_secure', 1);,强制会话 Cookie 仅通过 HTTPS 传输
禁止 HTTP 访问 phpMyAdmin 路径
只开 HTTPS 不够,必须堵死 HTTP 入口。否则用户手动输 http:// 地址仍能访问,且可能触发浏览器缓存、Referer 泄露等风险。
立即学习“PHP免费学习笔记(深入)”;
- 在 Nginx 的
80server 块中,针对 phpMyAdmin 路径做 301 强制跳转:location /phpmyadmin { return 301 https://$host$request_uri; } - 更彻底的做法:在
80server 块里直接 deny 所有 phpMyAdmin 请求:location ^~ /phpmyadmin { return 403; },避免任何 HTTP 下的试探 - 注意 location 顺序:该规则需放在通用
location /之前,否则会被通配覆盖
常见连不上、白屏或“无法创建会话”的直接原因
这类问题 90% 出在 Nginx 与 PHP-FPM 的 HTTPS 上下文传递缺失,而非 phpMyAdmin 自身配置。
- Nginx 的
fastcgi_param HTTPS on;必须显式设置——这是告诉 PHP 当前请求走的是 HTTPS,否则$_SERVER['HTTPS']为空,phpMyAdmin 会误判协议类型 - 检查
fastcgi_param SCRIPT_FILENAME路径是否指向真实物理路径(如$document_root$fastcgi_script_name),尤其当 phpMyAdmin 不在默认 root 下时,路径错误会导致 404 或空白页 - PHP 错误日志(
/var/log/php-fpm/www-error.log或 Nginx error_log)里若出现session_start(): Cannot send session cache limiter,基本是session.cookie_secure开了但 Nginx 没传HTTPS参数,或浏览器缓存了旧的 HTTP Cookie - 不要给 phpMyAdmin 目录设
chmod -R 555:这会阻止 PHP 写临时文件(如 upload、tmp),应保持755目录 +644文件,仅config.inc.php设600
最易被忽略的一点:Nginx 的 fastcgi_param HTTPS 不是默认开启的,哪怕你监听 443,PHP 也收不到协议标识——没有它,phpMyAdmin 就不知道自己正跑在 HTTPS 上,所有安全机制形同虚设。



















