Nginx
Nginx 反向代理傳遞到單獨的 Tomcat 伺服器未通過
這是我在 NginX /sites-enabled 目錄中的文件:
upstream tomcat_server { server 192.168.1.100:8080 fail_timeout=0; } server { listen 80 default_server; listen [::]:80 default_server; server_name _____.com www._____.com; location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://tomcat_server; } }
現在,流程是這樣的:
- 我訪問我的域_____.com,請求被映射到我的路由器的 IP 埠 39080。
- 在我的路由器中,我將請求從埠 39080 埠轉發到埠 80 的 192.168.1.136(我的 nginx 伺服器正在執行的地方,單獨的機器)。
- Nginx 正在偵聽埠 80 並接收請求。
我想要它做的是將請求重定向到在單獨的機器上執行的 Tomcat 伺服器,所以我把它放到
proxy_pass
了 Tomcat 伺服器上。實際發生的是請求掛起,並且我的螢幕上有一個空白頁面。Tomcat 日誌顯示對請求的 200 OK 響應,但它應該載入其餘內容,包括頁面、圖像和腳本等等。
“GET /app-portal/HTTP/1.0” 200
// 就是這樣
[
/app-portal/
是我的伺服器端程式碼重定向/
到]我可以確認這是 nginx 的問題,因為當我將路由器埠轉發直接更改為 tomcat 伺服器而不是 nginx 時,頁面載入了所有內容。
可能是什麼問題呢?
–
我不知道這是否是一個主要問題,但我注意到成功的請求(從我直接從路由器到 tomcat 伺服器時)使用的是 HTTP1.1,而 nginx 的失敗請求使用的是 HTTP1.0
“proxy_pass http://tomcat_server ;” 對我來說看起來很奇怪,那裡有那個http。
建議您嘗試刪除上游並這樣做。
location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.1.100:8080 }
這篇文章有一個很好的指南。
proxy_pass 應該是一個完整有效的域或 IP 地址。proxy_pass http://tomcat_server ; 無效並且導致無處可去。如果這是您的 Tomcat 伺服器 192.168.1.100:8080 的 IP,那麼您應該這樣做 #proxy_pass http://192.168.1.100:8080;然後登錄到 ssh 並執行它來測試輸出。wget http://192.168.1.100:8080 希望有幫助