Nginx
NGINX 未將所有請求標頭傳遞給 Tomcat
我有一個執行 NGINX 的 CentOS 系統,後面有 Tomcat。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”標頭。
下面是第二個發往 NGINX 而不是 Tomcat 的請求。注意沒有“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”設置為 on,但它似乎沒有做任何事情。這是 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"; } }
如果您看到我的錯誤在哪里或者可以指出我正確的方向,請告訴我。讓這個工作有問題。謝謝!
包含下劃線的標題被 視為無效
nginx
,這就是預設情況下不會傳遞它們的原因。該行為可以被underscores_in_headers
指令覆蓋。例如:underscores_in_headers on;
有關更多資訊,請參閱此文件。