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
nginx
http-headers
Mike
fonte
fonte
Você deve usar
proxy_set_header
para todos os cabeçalhos que deseja encaminhar para os servidores back-end. Então, em vez deproxy_pass_header ...
linha:fonte
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_id
adicionadoproxy_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 on
seu Nginx Config.fonte
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.
Para permitir que o Nginx transmita todo ou o cabeçalho solicitado personalizado para o back-end, ative a opção de sublinhado.
fonte