2014-07-16 83 views
0

我試圖把一個服務器@家到位與一些基本的服務。所有服務都運行在專用虛擬機上。每個VM都託管在vSphere 5.5上。到目前爲止,我有:Nginx的又一個502錯誤

  • Debian的喘息與作爲反向代理的nginx:192.168.1.12
  • Debian的喘息與用作Web應用程序服務器的NodeJS:192.168.1.43
    • 192.168.1.43:3000 =>使192.168.1.43:3001
    • 192.168.1.43:3001 => HTTPS Web服務器上的重定向HTTP Web服務器,使得所提供的服務
  • 的Debian喘鳴與madso網卡設置:192.168.1.35
    • 作爲文檔說我把--https端口= 443在配置啓用HTTPS訪問

我使用nginx的是能有類似的東西這樣的:

  • myapp.mydomaine.com =>去@的NodeJS 192.168.1.43
  • music.mydomain.com =>去madsonic @ 192.168.1.35

我遵循教程,並在/ etc/nginx/sites-enabled中編輯了「默認」文件。下面是它的樣子:

server { 
listen 80; 
server_name myapp.domaine.com; 
location/{ 
    proxy_pass http://192.168.1.43:3000; 
} 
} 
server { 
listen 443; 
server_name myapp.domain.com; 
ssl on; 
ssl_certificate [...]; 
ssl_certificate_key [...]; 
location/{ 
    proxy_pass https://192.168.1.43:3001; 
} 
} 
server { 
listen 80; 
server_name music.domain.com; 
location/{ 
    proxy_pass http://192.168.1.35:4040; 
} 
} 
server { 
listen 443; 
server_name music.domain.com; 
ssl on; 
ssl_certificate [...]; 
ssl_certificate_key [...]; 
location/{ 
    proxy_pass https://192.168.1.35; 
} 
} 

myapp上的第一個重定向工作。當我在madsonic服務器上只有http時,音樂重定向就起作用。當我在madsonic服務器上激活https時,我得到一個502錯誤的網關錯誤(但Firefox中的URL是https://music.domain.com)。

我也tryed一些其他的方法,如這裏mentionned: How to redirect on the same port from http to https with nginx reverse proxy

也不能工作。

我還在/var/logs/nginx/error.log中看到502錯誤是由於SSL_do_handshake錯誤(SSl23_GET_SERVER_HELLO:tlsv1)引起的。不知道它是否與502錯誤有關。

我有點困惑,因爲其他https服務工作正常。有人有建議嗎?非常感謝。

回答

1

下面是在serverfault.com上針對相同問題發佈的用戶「desasteralex」的答案。它工作,所以我在這裏分享他的答案(和大thx他順便說一句:D)。


首先,Nginx是你的SSL終結者。這意味着您無需同時以HTTP和HTTPS模式運行您的應用程序。 HTTP就足夠了。

因此,對於您的應用程序的配置可能看起來像:

server { listen 192.168.1.12:80; server_name myapp.domain.com; location/{ rewrite^https://$server_name$request_uri? permanent; } } 

該指令將上述所有重定向HTTP請求到HTTPS。

server { listen 192.168.1.12:443; server_name myapp.domain.com; ssl on; ssl_certificate [...]; ssl_certificate_key [...]; location/{ proxy_pass https://192.168.1.43:3000; } } 

我已經在proxy_pass中選擇了端口3000來指向您的應用的HTTP版本。您需要關閉應用程序的重新引導到端口3001.

關於您的music.domain.com重定向 - 對於HTTP,您在proxy_pass參數中使用端口4040,但在HTTPS中您不這樣做。我假設madsonic服務器只偵聽端口4040,這樣一個配置看起來是這樣的:

server { listen 192.168.1.12:80; server_name music.domain.com; location/{ rewrite^https://$server_name$request_uri? permanent; } } 

server { listen 192.168.1.12:443; server_name music.domain.com; ssl on; ssl_certificate [...]; ssl_certificate_key [...]; location/{ proxy_pass https://192.168.1.35:4040; } } 

希望這有助於。