2017-05-05 156 views
0

我們有nginx運行兩個服務器(端口80和443)。這些proxy_pass我們的上游:443上的Nginx,但節點處理SSL證書

upstream app_nodes { 
     ip_hash; 
     server 127.0.0.1:3000; 
     server 127.0.0.1:3001; 
    } 

    upstream app_nodes_https { 
     ip_hash; 
     server 127.0.0.1:8000; 
     server 127.0.0.1:8001; 
    } 

對於端口80,這很好。但是,對於443,這失敗了,因爲我們沒有在nginx中定義ssl證書。我們需要我們的node.js應用程序(監聽端口8000/8001)來處理證書以動態支持多個域。

有沒有辦法讓nginx簡單地代理我們的上游服務器,讓他們處理ssl?

謝謝

編輯:下面是443

server { 
     listen 443; 

     gzip on; 
     gzip_types text/plain application/json application/ocet-stream; 

     location/{ 
      proxy_pass  https://app_nodes_https;  
      add_header  X-Upstream $upstream_addr; 
      add_header  X-Real-IP $remote_addr;  
      include   /etc/nginx/proxy_params; 
     } 

} 

nginx -t我們的服務器模塊實際上給出了https protocol requires SSL support

+0

由於您不能查看流量的HTTP部分,如果nginx不是SSL端點,您需要使用普通TCP進行負載平衡。請參閱[nginx負載平衡 - tcp和udp負載平衡器](https://www.nginx.com/resources/admin-guide/tcp-load-balancing/)。 –

+0

它說TCP是默認的,大概只是'listen 443;'我們用的是TCP – dzm

回答

0

的解決方案是使用流中的錯誤:

stream { 
     upstream https_stream { 
      hash $remote_addr; 
      server 127.0.0.1:8000; 
      server 127.0.0.1:8001; 
     } 
     server { 
      listen 443; 
      proxy_pass https_stream; 
     } 
} 

這是假設你正在運行8000/8001上的應用程序實例。