Traefik 2使用负载均衡时连接被拒、返回404及自动跳转HTTPS问题咨询
问题原因及修复方案
1. 404错误修复
首先排查以下几个配置错误点:
- Host匹配规则格式错误
Host规则仅校验请求的Host头字段,不需要携带协议前缀,你的路由规则存在写法错误:
原错误配置:
rule: "Host(`http://demo.lab.local`)"
修正为:
rule: "Host(`demo.lab.local`)"
- 确认规则文件已被正常加载
你配置了文件类型的配置提供器,指定读取容器内/rules目录的规则,需要确认启动Traefik容器时,已将本地存放规则文件的目录挂载到容器的/rules路径,否则规则不会被Traefik加载。你可以访问Traefik的8080端口后台(已开启api.insecure=true),在HTTP Routers列表查看是否存在demo_1-rtr路由,确认规则是否生效。 - 确认请求携带正确的Host头
访问时需要保证请求的域名是demo.lab.local,可以在本地hosts文件添加记录[Traefik服务器IP] demo.lab.local,或者使用curl命令直接测试:
curl -H "Host:demo.lab.local" http://[Traefik服务器IP]
2. HTTPS重定向问题排查
你当前的Traefik配置没有配置HTTP强制跳转HTTPS的全局规则或路由级规则,重定向行为不属于Traefik的返回结果,排查方向如下:
- 后端服务本身配置了HTTPS跳转逻辑,可直接在Traefik容器内执行以下命令验证后端响应:
curl -v http://172.16.9.90:16000
如果后端返回301/302状态码且Location字段为HTTPS开头的地址,就是后端服务本身的跳转逻辑,调整后端配置即可。
- 浏览器本地缓存了HSTS规则导致强制跳转HTTPS,可使用浏览器无痕模式或者curl命令测试,排除缓存干扰。
3. 多负载节点配置方法
要为负载均衡器添加多个节点,直接在对应service的loadBalancer.servers下新增多个服务url即可,示例如下:
services: demo_1: loadBalancer: servers: - url: "http://172.16.9.90:16000" - url: "http://172.16.9.91:16000" - url: "http://172.16.9.92:16000"
内容的提问来源于stack exchange,提问作者Brandon Wilson
相关产品推荐
相关产品推荐

