web-dev-qa-db-ja.com

nginx:なぜ私はif句の中にproxy_set_headerを入れられないのですか?

この構成では:

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句の中に入れられないのはなぜですか?

9
Neuquino

あなたが実際に尋ねるつもりであると仮定して、「これを機能させるにはどうすればよいですか」、ヘッダーが常に渡されるように書き換えるだけですが、設定しない場合は無視される値に設定します。

server {
    listen 8080;    
    location / {
        set $xheader "someignoredvalue";

        if ($http_cookie ~* "mycookie") {
            set $xheader $request;
        }

        proxy_set_header X-Request $xheader;

        if ($http_cookie ~* "mycookie") {
            proxy_pass http://localhost:8081;
        }
    }
9
Danack

「もし」は、一般的にnginx構成では不適切な方法です。マップモジュールを使用して、物事を機能させることができます。参照 http://nginx.org/en/docs/http/ngx_http_map_module.htmlhttp://wiki.nginx.org/HttpMapModule

1
Drew Khoury