nginx pasando de nuevo encabezado personalizado

13

Tengo el siguiente ejemplo

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

Ahora cuando uso la siguiente línea de rizo

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

Ahora eso no funciona ... el apache / php en el backend no ve el encabezado. Si evito nginx funciona

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test
Miguel
fuente

Respuestas:

15

Debe usar la underscores_in_headers ondirectiva que está desactivada por defecto.

AlexD
fuente
Esta información me ahorra horas.
Morgan Cheng
Con mucho gusto le compraría una bebida refrescante.
ballmw
usted señor, es un erudito y un caballero.
Eve Freeman
2

Debe usarlo proxy_set_headerpara todos los encabezados que desee reenviar a los servidores de fondo. Entonces, en lugar de proxy_pass_header ...línea:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
Mikko
fuente
He intentado eso y no establece el encabezado correctamente, si reemplazo $ http_x_custom_header con "foo" funciona
Mike
No estoy seguro de por qué no funcionó para @Mike, pero sí funcionó para mí. Estoy usando X-Fordered-Proto con $ http_x_forwards_proto.
Tyler Collier
2

Lo anterior tampoco funcionó para mí, así que solía hacerlo proxy_pass_header. Vea el Wiki de Nginx sobre proxy_pass_header aquí .

Si su encabezado personalizado se device_idagrega proxy_pass_header device_id;a su bloque Proxy.

Si está utilizando encabezados personalizados con un guión bajo (como yo), asegúrese de tenerlo underscores_in_headers onen su configuración de Nginx.

usuario2700022
fuente
Muchas gracias ! Me estaba arrancando el cabello ... Tu publicación me alivió ...
Fahad Ahammed
1

Por defecto, el nginx reenvía todos los ( proxy_pass_request_headers on; ) el encabezado al servidor de fondo. Pero si el encabezado de su solicitud (puede ser un encabezado personalizado) incluye un guión bajo (_) en el nombre del encabezado, entonces nginx bloquea esos encabezados.

Ex: authenticate_type, cdn_enable.

Para permitir que Nginx pase todo o el encabezado solicitado personalizado al backend, active la opción de subrayado.

underscores_in_headers on;
GangaRam Dewasi
fuente