Rocky Linux升级后Traefik代理Cockpit出现ERR_TOO_MANY_REDIRECTS错误
解决Rocky Linux 9.1下Traefik代理Cockpit的重定向与网关错误
问题根源分析
- ERR_TOO_MANY_REDIRECTS:Rocky Linux 9的Cockpit默认强制HTTPS跳转,当Traefik以HTTP协议转发请求到Cockpit时,Cockpit会把请求重定向到HTTPS,而Traefik又会将HTTPS请求转成HTTP发给Cockpit,形成无限循环。
- Bad Gateway(用127.0.0.1):Traefik运行在Docker容器内,容器的
127.0.0.1指向容器自身而非宿主机,因此无法访问宿主机上的Cockpit服务。
修复步骤
1. 调整Traefik配置,解决重定向循环
修改Cockpit服务的转发配置,让Traefik以HTTPS协议连接Cockpit,同时添加信任头避免Cockpit强制跳转:
http: routers: cockpit: rule: "Host(`cockpit.mywebsite.com`)" service: cockpit-service priority: 1000 tls: certresolver: myresolver entryPoints: - websecure middlewares: - cockpit-headers services: cockpit-service: loadBalancer: servers: - url: "https://192.168.0.54:9090" serverTLSConfig: insecureSkipVerify: true # 跳过Cockpit自签名证书验证 middlewares: cockpit-headers: headers: customRequestHeaders: X-Forwarded-Proto: "https" X-Forwarded-For: "192.168.0.54"
2. 解决Docker容器访问宿主机Cockpit的问题
如果不想用宿主机局域网IP,可选择以下方式:
- Linux环境下,启动Traefik容器时添加
--add-host=host.docker.internal:host-gateway参数,之后在配置中用https://host.docker.internal:9090作为后端地址 - 确保宿主机防火墙开放9090端口,Traefik容器能正常访问宿主机IP的该端口
3. 调试级Cockpit配置修改(可选,不推荐生产环境)
若上述配置仍有问题,可临时修改Cockpit配置文件/etc/cockpit/cockpit.conf,允许HTTP访问并信任转发头:
[WebService] Origins = https://cockpit.mywebsite.com wss://cockpit.mywebsite.com ProtocolHeader = X-Forwarded-Proto AllowUnencrypted = true
4. 重启服务生效
- 重启Traefik容器:
docker restart traefik - 重启Cockpit服务:
systemctl restart cockpit.socket cockpit.service
内容的提问来源于stack exchange,提问作者tomdev
相关产品推荐
相关产品推荐

