You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx Ingress双认证场景下X-User请求头丢失问题求助

问题分析

核心问题在于:API-Key认证的Ingress通过auth-url调用Basic Auth端点时,Basic Auth的Ingress里的X-User是在代理到WebAPI阶段设置的,并非Basic Auth认证服务返回的响应头。而auth-response-headers仅能捕获认证服务返回的响应头,因此这个X-User无法被传递到API-Key Ingress的后端服务。

解决方案

以下两种修改方式任选其一即可:

方式一:调整Basic Auth Ingress,让认证阶段返回X-User头

修改ingress-basic-auth的注解,在Basic Auth认证成功后,直接在认证响应中返回X-User头,这样API-Key Ingress就能通过auth-response-headers捕获并传递给后端:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-basic-auth
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
    nginx.ingress.kubernetes.io/auth-snippet: |
      # 将认证后的用户名存入变量,添加到认证响应头中
      auth_request_set $auth_user $remote_user;
      add_header X-User $auth_user;
    nginx.ingress.kubernetes.io/auth-response-headers: X-User
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header X-User $remote_user;
spec:
  rules:
  - host: basic-auth.localdev.me
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: webapi
            port:
              number: 80
  ingressClassName: nginx

方式二:在API-Key Ingress中直接传递捕获到的X-User头

API-Key Ingress调用Basic Auth端点后,Nginx会将认证响应中的X-User头存入$upstream_http_x_user变量,直接在configuration-snippet中设置代理头即可:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-apikey
  annotations:
    nginx.ingress.kubernetes.io/auth-url: https://basic-auth.localdev.me/
    nginx.ingress.kubernetes.io/auth-snippet: |
      proxy_set_header Authorization "Basic $http_x_api_key"; 
    nginx.ingress.kubernetes.io/auth-response-headers: X-User
    nginx.ingress.kubernetes.io/configuration-snippet: |
      # 将认证响应中的X-User设置到代理头,传递给后端
      proxy_set_header X-User $upstream_http_x_user;
spec:
  rules:
  - host: api-key.localdev.me
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: webapi
            port:
              number: 80
  ingressClassName: nginx
验证说明

重新应用Ingress配置后,调用API-Key端点时,Nginx会从Basic Auth的认证响应中获取X-User并传递给WebAPI,即可解决请求头丢失的问题。

内容的提问来源于stack exchange,提问作者Mario Rossi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:27:26