Nginx auth_request_set指令取值为空故障排查求助
问题原因
你的配置存在两个核心错误点:
$upstream_*系列变量仅在请求经过proxy_pass、fastcgi_pass等代理指令转发到外部上游服务时才会被赋值。你的/test-auth端点是直接通过return指令在Nginx本地生成响应,没有触发上游请求,所以$upstream_http_x_test和$upstream_status自然始终为空。auth_request_set指令的取值上下文是auth子请求的作用域,你需要取子请求本地响应对应的变量,而非主请求的上游变量。
修复方案
将/proxy location下的auth_request_set两行配置修改为如下内容即可:
auth_request_set $test $sent_http_x_test; auth_request_set $test2 $sent_status;
其中$sent_http_x_test对应auth子请求返回的X-Test响应头值,$sent_status对应auth子请求的响应状态码,二者对Nginx本地生成的响应也能正常取值。
如果需要保证X-Test、X-Test2响应头在所有状态码下都正常返回给浏览器,可以给add_header指令补充always参数:
add_header X-Test $test always; add_header X-Test2 $test2 always;
修改后重新加载Nginx配置,即可看到X-Test、X-Test2头正常返回,上游content服务也能收到对应的test、test2参数。
内容的提问来源于stack exchange,提问作者Alexander Pravdin
相关产品推荐
相关产品推荐

