Oauth2-proxy对接Traefik时出现ERR_TOO_MANY_REDIRECTS重定向循环问题
问题根因
你遇到的重定向循环是多个配置不匹配共同导致的,核心问题如下:
- Cookie安全属性与HTTPS环境不兼容:你当前全站走HTTPS访问,但oauth2-proxy配置了
cookie-secure: false,导致浏览器在HTTPS站点下不会正常传递认证cookie,oauth2-proxy每次请求都判定用户未登录,持续触发认证跳转。 - ForwardAuth地址配置错误:你使用公网域名作为forwardAuth的调用地址,Traefik每次校验身份时都会绕公网重新请求站点,再次触发根路由的认证规则,形成循环。
- 冗余的SSL跳转配置:
auth-headers中间件中开启了sslRedirect: true,但你已经在Traefik全局配置了SSL强制跳转,且oauth2-proxy的路由入口本身就是websecure(443)端口,冗余的跳转规则会导致内部HTTP调用被强制跳转到HTTPS,加重循环。
修复步骤
1. 修改oauth2-proxy配置
将cookie安全属性适配HTTPS环境,调整如下:
extraArgs: # 将false改为true,适配HTTPS站点 cookie-secure: true # 其余配置保持不变
2. 调整Traefik中间件配置
修改oauth-auth中间件
将forwardAuth地址改为集群内部Service地址,避免绕公网触发认证,同时增加认证响应头配置,确保上游服务能拿到身份信息:
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: oauth-auth spec: forwardAuth: # 替换为你oauth2-proxy所在命名空间的集群内网地址 address: http://oauth2-proxy.<你的命名空间>.svc.cluster.local/oauth2/auth trustForwardHeader: true authResponseHeaders: - Authorization - X-Forwarded-User
修改auth-headers中间件
去掉冗余的SSL跳转配置:
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: auth-headers spec: headers: # 删掉sslRedirect: true这一行 stsSeconds: 315360000 browserXssFilter: true contentTypeNosniff: true forceSTSHeader: true stsIncludeSubdomains: true stsPreload: true frameDeny: true
(可选)优化oauth-errors中间件
增加登录后重定向回原访问地址的逻辑,提升使用体验:
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: oauth-errors spec: errors: status: - "401-403" service: name: oauth2-proxy port: 80 query: "/oauth2/sign_in?rd={url}"
3. 显式设置oauth2-proxy路由优先级
给oauth2-proxy的IngressRoute设置更高优先级,确保/oauth2/开头的请求不会匹配到根路由的认证规则:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: oauth2-proxy spec: entryPoints: - websecure routes: - match: "Host(`mycompany.com`) && PathPrefix(`/oauth2/`)" kind: Rule # 显式设置高于根路由的优先级 priority: 100 services: - kind: Service name: oauth2-proxy port: 80 middlewares: - name: auth-headers
4. (可选)配置Traefik信任NLB转发头
因为你用AWS NLB做SSL卸载,需要配置Traefik信任NLB传来的转发头,避免X-Forwarded-Proto识别错误:
在traefik-values.yaml中增加如下配置后重新升级Traefik:
additionalArguments: # 生产环境建议替换为你AWS VPC的NLB CIDR段,避免伪造头风险 - "--entrypoints.websecure.forwardedHeaders.trustedIPs=0.0.0.0/0"
修改完成后重新应用所有配置即可解决重定向循环问题。
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

