nginx: Por que não consigo colocar proxy_set_header dentro de uma cláusula if?

7

Com esta configuração:

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

Eu tenho esse erro quando eu recarregar o serviço 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

Esta configuração funciona bem, mas não faz o que eu quero:

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

Por que não consigo colocar a diretiva proxy_set_header dentro de uma cláusula if?

    
por Neuquino 11.05.2013 / 20:50

2 respostas

8

Supondo que você realmente quisesse perguntar, 'como posso fazer isso funcionar', que tal reescrever, assim o cabeçalho é sempre passado, mas ele é configurado para algum valor ignorado se você não quiser que ele seja definido.

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;
        }
    }
    
por 12.05.2013 / 04:30
1

'Se' é geralmente uma prática ruim na configuração do nginx. Você pode usar o módulo de mapas para fazer as coisas funcionarem. veja o link link

    
por 12.05.2013 / 03:16