nginx: lee el encabezado personalizado del servidor ascendente

81

Estoy usando nginx como proxy inverso y trato de leer un encabezado personalizado de la respuesta de un servidor ascendente (Apache) sin éxito. La respuesta de Apache es la siguiente:

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

Quiero leer el valor de My-custom-header y usarlo en una cláusula if:

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

es posible? Gracias por adelantado.

Luis
fuente

Respuestas:

93

$ http _ nombre_de_la_clave_encabezado

es decir, si tiene un origin = domain.comencabezado, puede usar $http_originpara obtener " dominio.com "

En nginx admite el campo de encabezado de solicitud arbitraria. En el ejemplo anterior, la última parte de un nombre de variable es el nombre de campo convertido a minúsculas con guiones reemplazados por guiones bajos

Documento de referencia aquí: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

Para su ejemplo, la variable sería $http_my_custom_header.

cobaco
fuente
3
En realidad, eso está mal y no debería marcarse como la respuesta. Para cualquiera que se encuentre con esto en el futuro, la variable correcta es $http_. Usando OP como ejemplo, $http_my_custom_header
distingue entre
He corregido esta respuesta para que coincida con la documentación;)
Paul Dixon
14
Resulta que esto tampoco es correcto. OP pidió leer el valor de un encabezado de respuesta. Deberías usar $sent_http_my_custom_header. nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
Nathan
marque la respuesta de @ dev-gosain a continuación si necesita un encabezado de respuesta ascendente
filimonov
14
la respuesta es incorrecta. La persona que pregunta está intentando acceder al encabezado desde el servidor ascendente . La respuesta correcta es stackoverflow.com/a/30879181/111995
geekQ
50

Estaba enfrentando el mismo problema. Probé ambos $http_my_custom_headery $sent_http_my_custom_headerpero no funcionó para mí.

Aunque resolvió este problema usando $upstream_http_my_custom_header.

Dev Gosain
fuente
8

Utilice $ http_MY_CUSTOM_HEADER

Puedes escribir algo como

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}
Vladimir
fuente
6
El hombre dice: la última parte del nombre de una variable es el nombre del campo convertido a minúsculas con guiones reemplazados por guiones bajos.
Arjun Sreedharan
Me salvaste el día, gracias
lunes