2012-09-14 19 views
34

Sto usando nginx come proxy inverso e sto provando a leggere un'intestazione personalizzata dalla risposta di un server upstream (Apache) senza successo. La risposta Apache è il seguente:nginx - legge l'intestazione personalizzata dal server upstream

HTTP/1.0 200 OK 
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu) 
X-Powered-By: PHP/5.3.5-1ubuntu7.10 
Connection: close 
Content-Type: application/json; charset=UTF-8 
My-custom-header: 1 

voglio leggere il valore da My-custom-header e utilizzarlo in una clausola if:

location/{ 
    // ... 
    // get My-custom-header value here 
    // ... 
} 

è possibile? Grazie in anticipo.

risposta

38

$ http _ name_of_the_header

In nginx supporta arbitrario campo di richiesta di intestazione. Nell'esempio di cui sopra ultima parte di un nome di variabile è il nome del campo convertito in lettere minuscole con trattini sostituiti da underscore

Riferimento doc qui: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

Per esempio, la variabile sarebbe $http_my_custom_header.

+2

In realtà, questo è sbagliato, e non dovrebbe essere contrassegnato la risposta. Per chiunque si imbatta in questo in futuro, la variabile corretta è '$ http_'. Usando OP come esempio, '$ http_my_custom_header' (è sensibile al maiuscolo/minuscolo!) – jduncanator

+0

Ho corretto questa risposta per abbinare la documentazione;) –

+6

Come risulta, anche questo non è corretto. OP ha chiesto di leggere il valore di un'intestazione di risposta. Dovresti usare '$ sent_http_my_custom_header'. http://nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_ – Nathan

3

Usa $ http_MY_CUSTOM_HEADER

È possibile scrivere un-cosa come

set my_header $http_MY_CUSTOM_HEADER; 
if($my_header != 'some-value') { 
#do some thing; 
} 
+0

man dice - l'ultima parte di un nome di variabile è il nome del campo convertito in __lower case__ con trattini sostituiti da underscore. –

23

stavo affrontando lo stesso problema. Ho provato sia $http_my_custom_header e $sent_http_my_custom_header ma non ha funzionato per me.

Sebbene risolto questo problema utilizzando $upstream_http_my_custom_header.

+0

Questo funziona per me, su nginx 1.10.1 – chhantyal

Problemi correlati