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


9

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 recarrego 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

Essa 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 em uma cláusula if?


Por favor, não faça postagens cruzadas. stackoverflow.com/questions/16500594/…
ceejayoz

Abri uma conversa para discutir sobre isso. Podemos continuar a discussão lá: chat.stackexchange.com/rooms/8745/nginx
Neuquino

Respostas:


10

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

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

Você quer dizer ""né?
Michael Hampton

2
Pessoalmente, prefiro definir que as coisas obviamente não sejam um valor real, em vez de potencialmente esquecer que esse hack estava em vigor e depois me perguntar por que o cabeçalho estava vazio. Se estiver definido como "X-Header-not-set-by-nginx", você nunca ficará confuso.
Danack

De acordo com este artigo: nginx.com/resources/wiki/start/topics/depth/ifisevil . As únicas coisas 100% seguras que podem ser feitas dentro de um contexto de local são retornar e reescrever. Duvido que o proxy_pass se o bloco sempre funcione.
Chau Chee Yang

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.