配置Traefik转发至Apache时出现重定向次数过多问题求助
问题分析与解决方案
重定向循环的核心原因是Traefik提供HTTPS访问,但后端Apache/Django仍在生成HTTP协议的重定向响应,导致浏览器在HTTPS和HTTP之间反复跳转。结合你的配置,具体排查和修复步骤如下:
1. 修正Apache的硬编码重定向配置
原Apache配置中认证后重定向到http://django:80/,这种硬编码HTTP协议的写法会直接触发循环:
- 将重定向目标改为相对路径(比如
/),避免强制指定HTTP协议; - 启用Apache的
mod_headers模块,添加请求头让后端识别当前协议:RequestHeader set X-Forwarded-Proto "https"
2. 让Django识别HTTPS代理请求
在Django项目的settings.py中添加以下配置,确保Django知道请求是通过HTTPS代理转发的,生成的URL和重定向会使用HTTPS:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') USE_X_FORWARDED_HOST = True
3. 完善Traefik路由的服务指向
当前web服务的Traefik标签缺少服务端口的明确配置,Traefik无法正确转发请求到Apache:
在web服务的labels中添加以下两行(替换${VIRTUAL_PORT}为Apache实际监听的端口,比如80):
labels: # ... 原有标签 ... - "traefik.http.services.chronocommand.loadbalancer.server.port=${VIRTUAL_PORT}" - "traefik.http.routers.chronocommand.service=chronocommand"
4. 配置Traefik的HTTP到HTTPS自动重定向(可选)
如果需要强制所有HTTP请求跳转至HTTPS,在Traefik静态配置中修改web入口点:
entryPoints: web: address: :80 http: redirections: entryPoint: to: websecure scheme: https websecure: address: :443 http: tls: true
5. 移除Apache的LDAP基础认证
由于已改用Authelia做认证,需确保Apache配置中删除原有LDAP相关的认证规则,避免双重认证或认证失败引发的异常重定向。
内容的提问来源于stack exchange,提问作者ilteen
相关产品推荐
相关产品推荐

