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;
바라보다이 파일더 알아보기.