服务器和客户端上指示的 HTTPS 不匹配

Wor*_*orp 8 php apache phpmyadmin

这是我打开 phpMyAdmin 的登录(索引)页面时的警告:

There is mismatch between HTTPS indicated on the server and client.
This can lead to non working phpMyAdmin or a security risk.
Please fix your server configuration to indicate HTTPS properly.
Run Code Online (Sandbox Code Playgroud)

该错误应该是由我的客户端和 phpmyadmin 本身之间的负载均衡器引起的。SSL 在负载均衡器上终止,因此正在使用的 URL(我假设 phpmyadmin 在请求标头中收到)是https://mydomain/phpmyadmin

负载均衡器通过 http 与 phpmyadmin 通信,因此 lb 和 pma 之间使用的 URL 是http://mydomain/phpmyadmin(不是 https)。

我在 github 上发现了这篇非常合适的文章:Possibility to deactivate SSL connection #170,它适用于 Docker 容器,并描述了要传递给名为“PMA_ABSOLUTE_URI”的容器以解决问题的环境变量。

这将在 phpmyadmin NON Docker 中进行哪个设置?

我的问题的任何其他解决方案也受到高度赞赏。

旁注:登录后 phpmyadmin 工作正常。您可以登录,登录后没有警告,您可以毫无问题地执行所有交互。我只是担心警告。

小智 22

我的设置与您描述的完全相同。前端负载均衡器充当反向代理,也充当 SSL/TLS 终结器。LB 与运行 phpMyAdmin 的后端服务器以普通的 http 通信。

当我从 4.0.4.1 升级到 4.9.0.1 时,我在 phpMyAdmin 登录屏幕上收到了与您相同的警告。我能够通过“伪造”协议从 http 到 https 在反向代理上解决这个问题。就我而言,我的反向代理是一个 Nginx Web 服务器,就在我传递到后端服务器之前,我添加了X-Forwarded-Proto

 server {
  listen 443;
  server_name my.phpmyadmin.example.com;

[... log and ssl settings ...]

  location / {
    include /etc/nginx/proxy.conf;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http://backendserver;
  }
}
Run Code Online (Sandbox Code Playgroud)

通过添加proxy_set_header X-Forwarded-Proto https;这会告诉后端服务器客户端到代理的通信是通过 https 进行的。如果不设置此标头,phpMyAdmin 可能会识别(不确定,只是猜测)它已加载到 https:// URL 上,但通信(反向代理和 phpMyAdmin 服务器之间)通过 http 发生。因此,这是一个正确的警告。

重新加载 Nginx 后,警告就会从 phpMyAdmin 登录屏幕中消失。

  • `proxy_set_header X-Forwarded-Proto $scheme;` 将相应地处理 http 或 https。 (2认同)