我在使用 haproxy 和混合内容时遇到了问题。当我尝试通过 haproxy ssl 进行连接时,默认配置下的浏览器(在本例中为 Firefox 或 Chrome)会阻止混合内容 - 在本例中为 http 连接。当我尝试不使用 haproxy 进行连接时,不会发生这种情况。
什么原因造成此情况?
以供参考:
我已经安装了 haproxy 版本 1.5.11
haproxy -v HA-Proxy 版本 1.5.11 2015/01/31 版权所有 2000-2015 Willy Tarreau
使用以下配置:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
stats timeout 30s
debug
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/admin.sock mode 660 level admin
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4
SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend webphp53_http
bind *:80
bind *:443 ssl crt /etc/ssl/private/cert.pem
mode http
default_backend webphp53_servers
backend webphp53_servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server php53_node1 192.168.127.67:80 check
server php53_node2 192.168.127.68:80 check
答案1
如果域名不同,混合内容会被直接阻止。确保当您切换到使用负载平衡器时,页面中的混合内容使用相同的服务器名称。
答案2
我发现这个问题只发生在你使用 Drupal 和 Wordpress 这样的 CMS 时,我发现解决方案强制两者都使用 https,在 Drupal 编辑 sites/default/settings.php 的情况下取消注释该行:
$base_url = 'https://域名_blablabla';
对于 Wordpress,需要安装 Wordpress HTTPS (SSL) 插件https://wordpress.org/plugins/wordpress-https/