Nginx

Nginx 反向代理傳遞到單獨的 Tomcat 伺服器未通過

  • September 24, 2017

這是我在 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 希望有幫助

引用自:https://serverfault.com/questions/875206