NGINX não passando todos os cabeçalhos de solicitação para o Tomcat

1

Eu tenho um sistema CentOS rodando o NGINX com o Tomcat por trás dele. O NGINX tem SSL ativado e é usado apenas para enviar a conexão ao Tomcat. Praticamente tudo está funcionando bem, exceto que determinados cabeçalhos de solicitação não estão chegando ao Tomcat.

Nosso desenvolvedor Java fez uma página de teste para imprimir os cabeçalhos das solicitações e aqui estão os resultados para que você possa ver o que estou falando:

curl -H 'auth_token: some value' -H 'Host: demo-test.domain.com' http://127.0.0.1:8080/sjl.jsp
header.user-agent=curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
header.accept=*/*
header.auth_token=some value
header.host=demo-test.domain.com 

Acima, você pode ver a solicitação ir diretamente para o Tomcat, observe que o cabeçalho "auth_token" foi recebido.

Abaixo está o segundo pedido que vai para o NGINX em vez do Tomcat. Não observe nenhum cabeçalho "auth_token".

curl -H 'auth_token: some value' -H 'Host: demo-test.domain.com' -k https://127.0.0.1/sjl.jsp
header.host=demo-test.domain.com
header.connection=close
header.user-agent=curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
header.accept=*/* 

Eu tentei atualizar o nginx.conf para ativar "proxy_pass_request_headers", mas ele não pareceu fazer nada. Aqui está o conf para o site no NGINX:

upstream demo-test.domain.com {
   ip_hash;   
   server demo-test.domain.com:8080; 
}

server {
    listen 80;
    listen [::]:80;
    server_name demo-test.domain.com www.demo-test.domain.com; 
    return 301 https://demo-test.domain.com$request_uri;
}

server {
   listen 443; 
   server_name demo-test.domain.com;

   location / {
      proxy_pass http://demo-test.domain.com;
      proxy_pass_request_headers on;
   }

   location /WebSocketServlet {
        proxy_pass http://demo-test.domain.com;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
     }
}

Por favor, deixe-me saber se você ver onde está o meu erro ou pode me apontar na direção certa. Ter um problema para conseguir isso funcionar. Obrigado!

    
por saleetzo 19.07.2017 / 00:54

1 resposta

2

Cabeçalhos contendo sublinhados são considerados inválidos por nginx , e é por isso que eles não serão transmitidos por padrão. O comportamento pode ser substituído pela diretiva underscores_in_headers . Por exemplo:

underscores_in_headers on;

Veja este documento para saber mais.

    
por 19.07.2017 / 11:25

Tags