Nginx

如何將 nginx 配置為按埠代理,並為每個主機使用不同的 SSL 證書?

  • April 26, 2017

(更新)我想代理這樣的請求:

https://port123.host.com:85/any/path ==> http://server85:123/any/path
https://port567.host.com:85/any/path ==> http://server85:567/any/path
https://port123.host.com:86/any/path ==> http://server86:123/any/path
https://port567.host.com:86/any/path ==> http://server86:567/any/path

你會建議我如何實現這一目標?(我知道這是一個有趣的架構)

伺服器聲明可以在沒有 SSL 的情況下工作,但不能。

server {
   listen 86 ssl;
   server_name port123;
   ssl_certificate CERT123;
   ssl_...;
   localtion / { proxy_pass.... }
}

server {
   listen 86 ssl;
   server_name port567;
   ssl_certificate CERT567;
   ssl...;
   localtion / { proxy_pass.... }
}

我看到這是 nginx 的一個已知限制(單個埠和單個 IP 上的多個 SSLS)。但我想知道是否有任何簡單的解決方法。我不能使用 SAN,因為我擁有的每台伺服器實際上都是帶有萬用字元證書的萬用字元。

我最終為每個 SSL 端點使用了一個單獨的 IP 地址。由於 TLS 會話在沒有主機頭的情況下發生,nginx 無法“猜測”要使用哪個證書。所以 IP 修復了它,我碰巧有一些可用的。所以:

server {
   listen 192.168.1.5:85 ssl;
   server_name port123;
   ssl_certificate     /port123.crt;
   ssl_certificate_key /port123.key;
   location / {
       proxy_pass http://server85:123/;
   }
}

server {
   listen 192.168.1.6:86 ssl;
   server_name port123;
   ssl_certificate     /port567.crt;
   ssl_certificate_key /port567.key;
   location / {
       proxy_pass http://server86:567/;
   }
}

我實際上有更多的組合,我也設置了不同的標題。但它終於奏效了。

一如既往,nginx 有最好的文章: http: //nginx.org/en/docs/http/configuring_https_servers.html

您可以為希望 nginx 偵聽的每個埠創建一個伺服器塊。在 server 塊中,您可以重定向到 host:port 組合。試試這個……它應該按照你的要求做:

server {
 listen       85;
 listen       [::]:85;
 server_name  port123.host.com;

 location / {
   proxy_pass         http://server85:123/;
   proxy_redirect     off;

   proxy_set_header   Host             $host;
   proxy_set_header   X-Real-IP        $remote_addr;
   proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 }
}

server {
 listen       86;
 listen       [::]:86;
 server_name  port567.host.com

 location / {
   proxy_pass         http://server86:567/;
   proxy_redirect     off;

   proxy_set_header   Host             $host;
   proxy_set_header   X-Real-IP        $remote_addr;
   proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 }
}

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