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

Nginx auth_request无法获取token查询参数的问题及解决方法

问题根源

用auth_request发起内部验证请求时,Nginx默认不会把原始客户端请求的查询参数(比如$arg_token)带到/auth的location上下文里。你现在在/auth里读取的$arg_token是内部/auth请求自身的参数,而非客户端请求的参数,所以自然是空值。

修复步骤

1. 修改location-snippets,添加参数传递指令

在主请求的location片段中,用auth_request_set把原始请求的token参数存储到新变量中:

location-snippets: "  
    auth_request /auth;
    auth_request_set $original_arg_token $arg_token;
"

2. 调整/auth location的逻辑

将server-snippets里所有用到$arg_token的地方,替换为刚才定义的$original_arg_token:

server-snippets: " 
    location = /auth {      
      if ($request_method = 'OPTIONS') { return 204; } 
      if ($request_uri !~ '/api/v') { return 200; } # 非API请求直接放行

      set $method POST;
      set $backend_path verify;

      if ($original_arg_token) {
        set $method GET;
        set $backend_path tokens/$original_arg_token/verify;
      }

      internal;
      resolver                kube-dns.kube-system.svc.cluster.local valid=5s;
      proxy_method            $method;
      proxy_pass              http://auth.default.svc.cluster.local:3000/api/v1/users/$backend_path;
      proxy_pass_request_body off;
      proxy_set_header        Content-Length '';
      proxy_set_header        X-Original-URI $request_uri;
    }"
补充说明

如果之后需要传递全部查询参数,也可以用auth_request_set $original_args $args;,然后在/auth里直接使用$original_args即可。

内容的提问来源于stack exchange,提问作者Mike Mwanje

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:42:55