nginx: Perché non riesco a inserire proxy_set_header in una clausola if?


9

Con questa configurazione:

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

Ho questo errore quando ricarico il servizio 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

Questa configurazione funziona bene, ma non fa quello che voglio:

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

Perché non riesco a inserire la direttiva proxy_set_header in una clausola if?


Per favore, non fare il cross-post. stackoverflow.com/questions/16500594/...
ceejayoz

Ho aperto una chat per discutere di questo. Possiamo continuare la discussione qui: chat.stackexchange.com/rooms/8745/nginx
Neuquino,

Risposte:


10

Supponendo che in realtà volessi chiedere "come posso far funzionare tutto questo", che ne dici di riscrivere in modo che l'intestazione venga sempre passata, ma è impostato su un valore ignorato se non vuoi che sia impostato.

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

Intendi ""vero?
Michael Hampton,

2
Personalmente preferisco impostare le cose in modo che non siano ovviamente un valore reale, piuttosto che dimenticare potenzialmente che questo hack era in atto, e quindi chiedersi perché l'intestazione fosse vuota. Se è impostato su "X-Header-not-set-by-nginx", non sarai mai confuso.
Danack,

Secondo questo articolo: nginx.com/resources/wiki/start/topics/depth/ifisevil . Le uniche cose sicure al 100% che possono essere eseguite all'interno di un contesto di posizione sono il ritorno e la riscrittura. Dubito che proxy_pass se il blocco funzionerà sempre.
Chau Chee Yang

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.