我在服务器部分定义了一个名为 $host_header 的变量,该变量在位置级别被覆盖。它工作得非常好,因为所有集合都是在重写阶段完成的,所以在任何 proxy_pass 指令之前。最终,“test-nginx”的 proxy_pass 与 Host 标头“位置级别”一起使用。但是,当我将 auth_request 指令(在我的示例中始终返回 200 并且它在访问阶段运行,因此在所有设置之后)添加到位置块时(这就是魔法),proxy_pass 与主机标头“服务器-level”,在我看来这是一个错误。它在 nginx 1.19.1 上
这是示例代码。任何想法为什么会发生?这是一个错误还是我做错了什么?
server {
listen 80;
server_name "local.main.server";
set $host_header "server level";
proxy_set_header Host $host_header;
location /test {
auth_request /auth;
set $host_header "location level";
# call backend server
proxy_pass http://test-nginx;
}
location = /auth {
internal;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
# this simply return 200
proxy_pass http://test-nginx;
}
}