2013-05-11 8 views
7

Con questa configurazione:Perché non riesco a mettere proxy_set_header all'interno di una clausola if?

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

ho questo errore quando ricarico 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 fare 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 all'interno di una clausola if?

Grazie in anticipo!

+0

Si prega di non cross-post. http://serverfault.com/questions/506972/nginx-why-i-cant-put-proxy-set-header-inside-an-if-clause – ceejayoz

+0

Ho aperto una chat per discutere di questo. Possiamo continuare la discussione lì. http://chat.stackexchange.com/rooms/8745/nginx – Neuquino

risposta

0

A differenza di proxy_pass, non è possibile inserire proxy_set_header in un blocco if. Puoi metterlo solo in http/server/blocco posizione. Quindi la tua seconda configurazione è buona.

Riferimento: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

contesto: http server, posizione

Non so che cosa la variabile richiesta di $ è. Non compare nell'elenco delle variabili nginx: http://wiki.nginx.org/HttpCoreModule#Variables. Cosa stai cercando di ottenere qui?

+0

Quello che sto cercando di fare è: "se cookie 'mycookie' è definito, quindi inserire l'URL originale in un'intestazione e inviare la richiesta a un altro server" – Neuquino

+0

Quindi utilizzare $ request_uri anziché $ richiesta –

+1

Ok, ma questo non risolve il problema. Conosci qualche modo per aggiungere quell'intestazione? Ho anche provato la direttiva add_header senza successo http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header – Neuquino

0

posizione All'interno provare qualcosa di simile

// valore di intestazione di default in una nuova

set $ ESB variabile "$ REMOTE_ADDR, $ host";

// se esiste la mia intestazione personalizzata

if ($ http_my_header) {

set $ ESB "$ http_my_header, $ REMOTE_ADDR, $ host";

}

proxy_set_header mio-header $ ESB;

Problemi correlati