为什么我不能将proxy_set_header放在if子句中?

时间:2013-05-11 18:51:36

标签: configuration nginx proxy

使用此配置:

server {
    listen 8080;
    location / {
        if ($http_cookie ~* "mycookie") {
            proxy_set_header X-Request $request;
            proxy_pass http://localhost:8081;
        }
    }
}

重新加载nginx服务时出现此错误:

Reloading nginx configuration: nginx: [emerg] "proxy_set_header" directive is not allowed here in /etc/nginx/conf.d/check_cookie.conf:5
nginx: configuration file /etc/nginx/nginx.conf test failed

此配置可以正常工作,但它不能满足我的要求:

server {
    listen 8080;
    location / {
        proxy_set_header X-Request $request;
        if ($http_cookie ~* "mycookie") {
            proxy_pass http://localhost:8081;
        }
    }
}

为什么我不能将 proxy_set_header 指令放在if子句中?

2 个答案:

答案 0 :(得分:2)

在内部位置尝试这样的事情

# default header value in a new variable
set $esb "$remote_addr, $host";

# if my custom header exists
if ($http_my_header){
  set $esb "$http_my_header, $remote_addr, $host";
}

proxy_set_header my-header $esb;

答案 1 :(得分:0)

与proxy_pass不同,您不能将proxy_set_header放在if块中。您只能将其放在http / server / location块中。所以你的第二个配置很好。

参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

  

上下文:http,服务器,位置

不知道$ request变量是什么。它不会出现在nginx变量列表中:http://wiki.nginx.org/HttpCoreModule#Variables。你想在这里实现什么目标?