Nginx
如何將 nginx 配置為按埠代理,並為每個主機使用不同的 SSL 證書?
(更新)我想代理這樣的請求:
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; } }