Назад | Перейти на главную страницу

nginx: почему я не могу поместить proxy_set_header в предложение if?

В этой конфигурации:

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?

Предполагая, что вы действительно хотели спросить: «Как я могу заставить это работать?», Как насчет того, чтобы просто переписать так, чтобы заголовок всегда передавался, но для него было установлено какое-то игнорируемое значение, если вы не хотите, чтобы он устанавливался.

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

«Если» - обычно плохая практика в конфигурации nginx. Вы можете использовать модуль карты, чтобы все работало. видеть http://nginx.org/en/docs/http/ngx_http_map_module.html http://wiki.nginx.org/HttpMapModule