NGINX가 모든 요청 헤더를 Tomcat에 전달하지 않음

NGINX가 모든 요청 헤더를 Tomcat에 전달하지 않음

Tomcat이 뒤에 있는 NGINX를 실행하는 CentOS 시스템이 있습니다. NGINX에는 SSL이 활성화되어 있으며 Tomcat에 연결을 푸시하는 데에만 사용됩니다. 일부 요청 헤더가 Tomcat에 도달하지 못하는 것을 제외하면 거의 모든 것이 잘 작동합니다.

Java 개발자는 요청 헤더를 인쇄하기 위한 테스트 페이지를 만들었습니다. 결과는 다음과 같습니다. 제가 말하는 내용을 확인하실 수 있습니다.

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 

위에서 요청이 Tomcat으로 직접 전송되는 것을 볼 수 있으며 "auth_token" 헤더가 수신된다는 점에 유의하세요.

다음은 Tomcat 대신 NGINX로 전송된 두 번째 요청입니다. "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=*/* 

"proxy_pass_request_headers"를 켜도록 nginx.conf를 업데이트하려고 시도했지만 아무 작업도 수행하지 않는 것 같습니다. 다음은 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";
     }
}

내가 어디로 잘못 가고 있는지 알고 있거나 올바른 방향을 알려줄 수 있다면 알려주시기 바랍니다. 제대로 작동하는 데 문제가 있습니다. 감사해요!

답변1

밑줄이 포함된 헤더는 잘못된 것으로 간주되므로 nginx기본적으로 전달되지 않습니다. 이 동작은 underscores_in_headers지시어로 재정의될 수 있습니다. 예를 들어:

underscores_in_headers on;

바라보다이 파일더 알아보기.

관련 정보