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

Nginx auth_request无法获取返回请求头与状态码问题咨询

问题原因

你的配置存在3个核心问题,导致无法拿到预期的响应头:

  • auth子请求/test-auth直接通过return指令在Nginx内部返回,没有经过上游转发流程,$upstream_*系列变量只有请求实际发送到上游服务时才会赋值,所以你无法通过auth_request_set捕获到任何子请求的响应头和状态码
  • 变量名使用错误:$sent_http_前缀对应的是主请求要返回给客户端的响应头,和auth子请求无关,无法用来获取子请求的返回值
  • 上游content服务返回的X-Test3头不会自动和你在/proxy location中配置的add_header合并,Nginx的add_header存在层级覆盖规则,当前层级配置了add_header后,不会自动继承上游或上层配置的响应头,需要显式声明返回
解决方案

修改配置如下即可实现需求:

  1. 新增一个本地server专门处理auth请求的返回,让auth子请求走上游转发流程,生成对应的$upstream_*变量
server {
    listen 4002;
    # 加always参数保证所有响应码都返回该头
    add_header X-Test "testvalue" always;
    return 200;
}
  1. 修改/test-auth location的配置,转发到刚才新增的本地auth服务
location /test-auth {
    proxy_pass http://127.0.0.1:4002;
    # 不需要传递请求体,优化性能
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}
  1. 修正/proxy location的配置,调整变量引用和响应头配置
location /proxy {
    auth_request /test-auth;
    # 用$upstream_http_x_test取auth子请求的响应头,横杠转下划线,全小写
    auth_request_set $test $upstream_http_x_test;
    # 取auth子请求的响应状态码
    auth_request_set $test2 $upstream_status;

    add_header X-Test1 "test1" always;
    add_header X-Test $test always;
    add_header X-Test2 $test2 always;
    # 显式取content上游返回的X-Test3头返回给客户端
    add_header X-Test3 $upstream_http_x_test3 always;

    proxy_pass http://content?test=$test&test2=$test2;
    proxy_pass_request_body off;
}

修改完成后重载Nginx配置,再次请求/proxy即可拿到全部4个预期响应头,同时proxy_pass的参数也会携带正确的$test和$test2值。

内容的提问来源于stack exchange,提问作者Alexander Pravdin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:02