nginx:なぜプロキシ句をif句の中に入れられないのですか?


9

この構成では:

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;
        }
    }
}

if句内にproxy_set_headerディレクティブを配置できないのはなぜですか?


クロスポストしないでください。stackoverflow.com/questions/16500594/...
ceejayoz

これについて話し合うためにチャットを開きました。:私たちは、そこの議論を続行することができますchat.stackexchange.com/rooms/8745/nginx
Neuquino

回答:


10

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

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;
        }
    }

ということ""ですか?
マイケルハンプトン

2
私は個人的には、このハッキングが行われたことを忘れてヘッダーが空である理由を不思議に思うのではなく、明らかに実際の値ではないものに設定することを好みます。「X-Header-not-set-by-nginx」に設定されている場合は、混乱することはありません。
Danack 2013年

この記事によると:nginx.com/resources/wiki/start/topics/depth/ifisevil。ロケーションコンテキスト内で行われる可能性のある唯一の100%安全なことは、returnとrewriteです。ブロックが常に機能する場合は、proxy_passを疑います。
Chau Chee Yang

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.