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
相关产品推荐
相关产品推荐

