我正在尝试将具有多个Web服务器的旧基础架构转换为具有单个公用IP地址的虚拟化环境。
所有的服务器stream量都比较低,所以性能不是问题。
我目前有nginx直接安装在我的防火墙/堡垒主机反向代理几个服务器(目前三个)。
我有一切工作与普通的HTTP。
我目前的HTTPconfiguration是(简化):
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name mydom.com www.mydom.com; location / { proxy_pass http://192.168.99.20:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name redmine.mydom.com git.mydom.com; location / { proxy_pass http://192.168.99.30:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name mail.mydom.com email.mydom.com webmail.mydom.com; location / { proxy_pass http://192.168.99.10:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } }
问题是:我应该如何configurationnginx转发HTTPS / SSL?
我沿用了一些东西:
server { listen 443 ssl; server_name mydom.com www.mydom.com; location / { proxy_pass https://192.168.99.20; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
但是这不适用于缺lessssl _… stanzas。
“真正”(代理服务器)的服务器已经有他们的证书,但nginx似乎需要“本地”证书(我不想提供)。
在这个用例中什么是“最佳实践”?
注意:如上所述,我需要在我的防火墙(IPFire)上部署反向代理,所以我的select非常有限; nginx和haproxy被提供,sniproxy不是。
试试haproxy
我已经成功地使用它。 我端口所有传入的stream量到haproxy虚拟机,然后它通过SSL连接到我的网站运行在其他虚拟机。
这是一个很好的开始使用haproxy
即使不使用stream模块在nginx上安装证书,也可以这样做。 这种方式nginx虽然作为一个TCP代理,你放松的能力,基于HTTP内容(头,cookies等)。
在这里你可以从官方文档中获得更多的信息:
https://www.nginx.com/resources/admin-guide/tcp-load-balancing/
https://nginx.org/en/docs/stream/ngx_stream_core_module.html
我不认为nginx能够做到这一点,但我跑sniproxy似乎是devise来做你想要的,通过启动SNI握手来确定所需的主机名,然后将其传递到正确的服务器,而不需要实际的密钥或证书。
由于它需要SNI,因此从XP和其他不支持它的旧客户端的连接将失败。