Rancher HAProxy HTTP转HTTPS重定向失效问题求助
我之前在Rancher 1.6.x搭配rancher/lb-service-haproxy:v0.7.15的环境里碰到过一模一样的问题,给你几个实用的排查和解决方向:
确认重定向规则的放置位置
Rancher的Custom haproxy.cfg配置是插入到自动生成的主配置中的,你必须把重定向规则放在对应80端口的frontend块里,而不是随便写在配置顶部。正确的写法应该是:frontend 80 bind *:80 redirect scheme https code 301 if !{ ssl_fc } # 保留Rancher自动生成的其他转发规则如果你单独写了一个不完整的frontend块,会和Rancher自动生成的配置冲突,导致规则不生效。
验证SSL服务的可用性
先确保你的443端口服务能正常访问(用浏览器直接访问https站点,确认证书有效、页面能加载)。如果HAProxy检测到443端口的SSL配置有问题,可能会跳过重定向逻辑。检查LB服务的端口映射
确认Rancher LB服务已经正确暴露了80和443端口,并且外部网络能正常访问这两个端口。如果80端口的流量根本没到达HAProxy,自然不会触发重定向。查看HAProxy日志排查细节
登录到HAProxy容器里查看实时日志,命令如下:# 先找到HAProxy容器ID docker ps | grep haproxy # 查看日志 docker logs <你的容器ID>日志里会显示每个请求的处理过程,你可以看到请求是否匹配了重定向规则,或者有没有报错信息(比如配置语法错误)。
尝试兼容型的重定向规则写法
有些旧版本的HAProxy对!{ ssl_fc }的匹配逻辑可能有兼容性问题,你可以换成更明确的规则写法试试:# 方法1:通过请求端口判断 redirect scheme https code 301 if { req_port 80 } # 方法2:用ACL定义规则 acl http_request req_port 80 redirect scheme https code 301 if http_request务必重启LB服务
修改配置后,一定要在Rancher UI里找到这个LB服务,点击「重启」按钮,让新配置完全生效。有时候配置修改后没重启,HAProxy还是在跑旧配置。
内容的提问来源于stack exchange,提问作者pkaramol

