http-headers proxy_pass - Reenviar encabezados de solicitud desde el servidor proxy nginx




example cache (3)

Estoy usando Nginx como proxy para filtrar las solicitudes a mi aplicación. Con la ayuda del "http_geoip_module" estoy creando un encabezado http de código de país, y quiero pasarlo como un encabezado de solicitud usando "headers-more-nginx-module". 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 solo establece el encabezado en la respuesta. Intenté usar "more_set_input_headers" en lugar de "more_set_headers", pero el encabezado ni siquiera se pasó a la respuesta.

¿Que me estoy perdiendo aqui?


Answers

Si desea pasar la variable a su proxy backend, debe configurarla 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 al backend proxy.


El problema es que los guiones bajos '_' no son válidos en el atributo del encabezado. Si eliminar el guión bajo no es una opción, puede agregarlo al bloque del servidor:

underscores_in_headers on;

Básicamente se trata de copiar y pegar del comentario de @ kishorer747 en la respuesta de @Fleshgrinder, 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 agregué aquí ya que en mi caso la aplicación detrás de nginx funcionaba perfectamente, pero tan pronto ngix estaba entre mi aplicación de matraz y el cliente, mi aplicación de matraz ya no veía los encabezados. Pasó bastante tiempo depurando.


Si está utilizando ubuntu, haga lo siguiente ...

Paso 1: Instale el sacacorchos

$ sudo apt-get install corkscrew

Paso 2: escriba un script llamado git-proxy.sh y agregue lo siguiente

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

Paso 3: hacer el script ejecutable

$ chmod +x git-proxy.sh

Paso 4: configura el comando proxy para GIT configurando la variable de entorno

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

Ahora usa los comandos git, tales como

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git






nginx proxy http-headers