Reenviar las cabeceras de las peticiones del servidor proxy nginx

Estoy usando Nginx como proxy para filtrar las peticiones a mi aplicación. Con la ayuda de la "http_geoip_module" I'm la creación de un código de país http-cabecera, y quiero pasarlo como un encabezado de solicitud utilizando "headers-más-nginx-módulo". Este es el bloque de ubicación en la configuración de Nginx:

location / {
    proxy_pass                      http://mysite.com;
    proxy_set_header                Host http://mysite.com;;
    proxy_pass_request_headers      on;
    more_set_headers 'HTTP_Country-Code: $geoip_country_code';
}

Pero esto sólo establece el encabezado en la respuesta. He intentado usar "more_set_input_headers" en lugar de "more_set_headers" pero entonces el encabezado ni siquiera se pasa a la respuesta.

¿Qué me estoy perdiendo aquí?

Solución

Si quieres pasar la variable a tu proxy backend, tienes que establecerla con el módulo proxy.

location / {
    proxy_pass                      http://example.com;
    proxy_set_header                Host example.com;
    proxy_set_header                HTTP_Country-Code $geoip_country_code;
    proxy_pass_request_headers      on;
}

Y ahora se pasa a la proxy backend.

Comentarios (4)

El problema es que '_' los guiones bajos no son válidos en el atributo header. Si la eliminación del guión bajo no es una opción que puede añadir al bloque de servidor:

underscores_in_headers on;

Esto es básicamente un copiar y pegar de @kishorer747 comentario sobre @Fleshgrinder respuesta, y la solución es de: https://serverfault.com/questions/586970/nginx-is-not-forwarding-a-header-value-when-using-proxy-pass/586997#586997

Lo he añadido aquí ya que en mi caso la aplicación detrás de nginx funcionaba perfectamente bien, pero en cuanto ngix se interponía entre mi aplicación flask y el cliente, mi aplicación flask dejaba de ver las cabeceras. Era un poco lento de depurar.

Comentarios (1)