2017-02-25 265 views
3

我遇到了一個簡單的配置與nginx一起工作的問題。我有一個服務器主機碼頭容器,所以nginx是在一個容器。所以讓我們打電話給url foo.com。我希望url foo.com/service1實際上只是轉到另一個端口上的foo.com,所以它實際上會拉foo.com:4321foo.com/service2foo.com:5432等等。這是我一直有問題的配置。Nginx反向代理配置

http { 
    server { 
     listen 0.0.0.0:80; 

     location /service1/ { 
      proxy_pass http://192.168.0.2:4321/; 
     } 

     location /service2/ { 
      proxy_pass http://192.168.0.2:5432/; 
     } 

    } 
} 

所以服務和nginx的生活在192.168.0.2。能夠做到這一點的首選方式是什麼?先謝謝你!

作爲一個方面說明,這是運行在碼頭集裝箱。謝謝!

+0

您能夠訪問主機服務器上的「http://192.168.0.2:4321 /」和「http://192.168.0.2:5432 /」嗎? –

+0

是的,我可以在運行nginx的計算機上查找兩個列出的地址和端口,我也可以從本地計算機上打開這些端口上的頁面,而不會出現問題。 – user3003510

+0

你能夠通過以下方式在你的nginx容器中得到響應:curl'http://192.168.0.2:4321/'和'http://192.168.0.2:5432 /'? – shizhz

回答

1
http { 
    server { 
     listen 80; 
     server_name foo.com; 

     location /service1/ { 
      proxy_pass http://192.168.0.2:4321/; 
     } 

     location /service2/ { 
      proxy_pass http://192.168.0.2:5432/; 
     } 

    } 
} 
+0

這與我所擁有的幾乎相同。我仍然獲得與我發佈的504網關超時相同的結果 – user3003510

1

我有你的問題是不相關的Nginx的本身猜測,而是它關係到泊塢聯網。你提供足夠的信息來做出詳細結論,但這裏是一些建議:

  1. 在何處運行nginx的容器運行,並嘗試curl從容器(I」裏面在同一臺主機的簡單泊塢容器已經看到你的答案,你可以從運行Nginx的服務器上調用curl,但它不是真的一樣)

  2. 例如,如果運行nginx容器的服務器是OSX或Windows,它可能會使用中間Linux虛擬機機器有自己的網絡堆棧,IP地址,路由等。

1

這是我的conf發送到內部玻璃魚。退房使用proxy_redirect關閉& proxy_set_header X-NginX-Proxy true;

#Glassfish 
    location /MyService/ { 

      index index.html; 

      add_header Access-Control-Allow-Origin $http_origin; 

      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_ssl_session_reuse off; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_set_header X-Forwarded-Server $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_pass http://127.0.0.1:18000/MyService/; 

    } 
2

,我認爲你應該檢查你是否foo.com通過移除反向代理配置指向正確的IP地址或不是第一。例如。

http { 
    server { 
     listen 80; 
     server_name foo.com; 

     location/{ 
     } 
    } 
} 

然後,如果你ip地址已經端口80上運行的服務,您應該指定server_name每個服務就像在我的例子。 Nginx只能通過server_name來區分哪個服務響應哪個域。

*我的猜測是你忘了server_name選項。