Nginx auth_request_set指令不起作用

4nkexdtk  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(162)

我有一个示例配置:

upstream content {
      server 127.0.0.1:4001;
    }

    server {
        listen 4000;

        location /test-auth {
            add_header X-Test "test value";
            return 200;
        }

        location /proxy {
            add_header "X-Test1" "test1";
            auth_request /test-auth;
            auth_request_set $test $upstream_http_x_test;
            auth_request_set $test2 $upstream_status;
            proxy_pass http://content?test=$test&test2=$test2;
            proxy_pass_request_body off;
            add_header X-Test $test;
            add_header X-Test2 $test2;
        }
    }

    server {
        listen 4001;
        add_header X-Test3 "test3";
        return 200 "test response $args";
    }

字符串
我想在请求/proxy时将X-Test头从auth位置传递到浏览器。这应该由auth_request_set指令通过拉取$upstream_http_x_test变量值来完成。但是当在auth端点输出中设置了header时,它总是空的。当直接访问/test-auth时,它会出现在输出中。但是我在/proxy的位置找不到它。此外,$upstream_status应该始终显示auth请求状态,但它也是空的。当我向/proxy发出请求时,我只得到以下内容:

X-Test3: test3
X-Test1: test1

test response test=&test2=


但是我还需要让X-TestX-Test2头由来自auth请求的数据和内容部分中的相应值填充。
/test-auth端点被正确调用。如果我在其中返回401,那么对/proxy的请求也会以401失败。
我做错了什么?

7vhp5slm

7vhp5slm1#

auth_request_set变量在location块中不可访问,但在access_by_lua中可用,请尝试以下操作:

access_by_lua_block {
    ngx.header["X-Test2"] = ngx.var["test2"]
  }

字符串

相关问题