NGINXを実行しているCentOSシステムとその背後にTomcatがあります。 NGINXではSSLが有効になっており、Tomcatへの接続をプッシュするためにのみ使用されます。特定のリクエストヘッダーがTomcatに到達しないことを除いて、ほとんどすべてが正常に機能しています。
私たちのJava devは、リクエストヘッダーを印刷するためのテストページを作成しました。結果は次のようになり、何を話しているかを確認できます。
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に送信される2番目のリクエストです。 「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=*/*
Nginx.confを更新して「proxy_pass_request_headers」をオンに設定しようとしましたが、何も実行されていないようです。 NGINXのサイトのconfは次のとおりです。
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";
}
}
私の間違いがどこにあるか、正しい方向に向けられるかどうかを教えてください。これを機能させるのに問題があります。ありがとう!
アンダースコアを含むヘッダーは、nginx
によって無効と見なされます。そのため、デフォルトではアンダースコアは渡されません。この動作は、underscores_in_headers
ディレクティブによってオーバーライドできます。例えば:
underscores_in_headers on;
詳細は このドキュメント を参照してください。