nginx: Pourquoi je ne peux pas mettre proxy_set_header dans une clause if?


9

Avec cette configuration:

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

J'ai cette erreur lorsque je recharge le service 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

Cette configuration fonctionne bien, mais elle ne fait pas ce que je veux:

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

Pourquoi je ne peux pas mettre la directive proxy_set_header dans une clause if?


S'il vous plaît ne pas cross-post. stackoverflow.com/questions/16500594/…
— ceejayoz

J'ai ouvert un chat pour en discuter. Nous pouvons poursuivre la discussion là - bas: chat.stackexchange.com/rooms/8745/nginx
— Neuquino

Réponses:


10

En supposant que vous vouliez réellement demander, `` comment puis-je faire fonctionner cela '', que diriez-vous de simplement réécrire pour que l'en-tête soit toujours passé, mais a-t-il la valeur ignorée si vous ne le voulez pas?

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

Tu veux dire "", non?
— Michael Hampton

2
Personnellement, je préfère que les choses ne soient évidemment pas une valeur réelle, plutôt que d'oublier potentiellement que ce hack était en place, puis de me demander pourquoi l'en-tête était vide. Si elle est définie sur "X-Header-not-set-by-nginx", vous ne serez jamais confus.
— Danack

Selon cet article: nginx.com/resources/wiki/start/topics/depth/ifisevil . Les seules choses 100% sûres qui peuvent être faites à l'intérieur si dans un contexte d'emplacement sont le retour et la réécriture. Je doute que le proxy_pass dans si le bloc fonctionnera toujours.
— Chau Chee Yang

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.