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

时间:2019-06-18 19:06:07

标签: 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.

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

loadbalancer通过http与phpmyadmin通信,因此lb和pma之间使用的URL为http://mydomain/phpmyadmin(不是https)。

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

哪个设置在phpmyadmin NON Docker中?

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

边注: Phpmyadmin在登录后工作正常。您可以登录,登录后没有警告,并且可以执行所有交互而不会出现问题。我只是担心警告。

1 个答案:

答案 0 :(得分:3)

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

当我从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;
  }
}

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

重新加载Nginx后,该警告将从phpMyAdmin登录屏幕上消失。