(已更新)我想代理这样的请求:
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
你会如何推荐我做到这一点? (我知道这是一个有趣的build筑)
服务器声明没有使用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,因为我拥有的每台服务器实际上都是通配符证书的通配符。
您可以为每个您希望nginx侦听的端口创build一个服务器块。 在服务器块内,您可以redirect到主机:端口组合。 试试这个…它应该做你所问:
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; } }
我结束了每个SSL端点的独立IP地址。 由于TLS会话在没有主机头的情况下发生,nginx不能“猜测”使用哪个证书。 所以IPs修复它,我恰好有一些可用。 所以:
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