nginx retornando cabeçalho personalizado

13

Eu tenho o seguinte exemplo

           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;
            }

Agora, quando eu uso a seguinte linha de ondulação

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

Agora isso não funciona .. o apache / php no back-end não vê o cabeçalho. Se eu ignorar o nginx, ele funciona

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

Respostas:

15

Você deve usar a underscores_in_headers ondiretiva que está desativada por padrão.

AlexD
fonte
Esta informação me economiza horas.
Morgan Cheng
Eu ficaria feliz em comprar uma bebida refrescante.
ballmw
senhor, é um estudioso e um cavalheiro.
Eve Freeman
2

Você deve usar proxy_set_headerpara todos os cabeçalhos que deseja encaminhar para os servidores back-end. Então, em vez de proxy_pass_header ...linha:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
Mikko
fonte
Eu tentei isso e não define o cabeçalho corretamente, Se eu substituir $ http_x_custom_header com "foo" ele funciona
Mike
Não sei por que não funcionou para o @Mike, mas funcionou para mim. Estou usando o X-Forwarded-Proto com $ http_x_forwarded_proto.
Tyler Collier
2

O exposto acima também não funcionou para mim, então eu usei proxy_pass_header. Veja o Wiki do Nginx sobre proxy_pass_header aqui .

Se o seu cabeçalho personalizado for device_idadicionado proxy_pass_header device_id;ao seu bloco Proxy.

Se você estiver usando cabeçalhos personalizados com um sublinhado (como eu), certifique-se de ter underscores_in_headers onseu Nginx Config.

user2700022
fonte
Muito obrigado ! Eu estava puxando meu cabelo para fora .... Seu post me aliviada ....
Fahad Ahammed
1

Por padrão, o nginx encaminha todos os ( proxy_pass_request_headers on; ) o cabeçalho para o servidor back-end. Mas se o cabeçalho da sua solicitação (pode ser um cabeçalho personalizado) incluir sublinhado (_) no nome do cabeçalho, o nginx bloqueará esses cabeçalhos.

Ex: authenticate_type, cdn_enable.

Para permitir que o Nginx transmita todo ou o cabeçalho solicitado personalizado para o back-end, ative a opção de sublinhado.

underscores_in_headers on;
GangaRam Dewasi
fonte