如何在Nginx Ingress的auth-url中使用路径正则提取的参数?
解决方案:动态提取路径组名传递给oauth2-proxy
Ingress Nginx的路径正则捕获组($1、$2这类)仅能直接用于rewrite-target注解,无法直接在auth-url中引用,需要通过Nginx配置片段自定义变量中转实现需求,具体配置如下:
完整Ingress配置示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 # 自定义Nginx配置片段:提取路径中的组名到变量$allowed_group nginx.ingress.kubernetes.io/configuration-snippet: | set $allowed_group ""; if ($request_uri ~* "^/resources/(\w+)/.*$") { set $allowed_group $1; } # 在auth-url中引用自定义变量 nginx.ingress.kubernetes.io/auth-url: "https://###/oauth2/auth?allowed_groups=$allowed_group" nginx.ingress.kubernetes.io/auth-signin: "https://###/oauth2/start?rd=$escaped_request_uri" name: app spec: ingressClassName: nginx rules: - host: my.app.com http: paths: - path: /resources/(\w+)/?(.*) pathType: Prefix backend: service: name: app port: number: 80
关键配置说明
- configuration-snippet:通过Nginx的
if指令结合正则匹配,从请求URI中提取组名(\w+匹配字母数字下划线,若组名包含特殊字符可调整正则为[^/]+,匹配除斜杠外所有字符),并将其存入自定义变量$allowed_group。 - auth-url:直接引用自定义变量
$allowed_group作为allowed_groups参数值,oauth2-proxy会收到动态的组名参数。 - path规则:调整为
/resources/(\w+)/?(.*),确保能匹配所有/resources/[组名]/xxx或/resources/[组名]格式的请求,同时rewrite-target的$2对应路径中组名后的部分,保证后端服务能收到正确的请求路径。
验证方法
- 查看Ingress Nginx控制器的Pod日志,确认Nginx配置已正确生成包含变量提取的规则。
- 查看oauth2-proxy的日志,检查
allowed_groups参数是否已正确携带路径中的组名。
内容的提问来源于stack exchange,提问作者peppie
相关产品推荐
相关产品推荐

