如何让 nginx 为多个虚拟主机做 SSL 透传?
Posted
技术标签:
【中文标题】如何让 nginx 为多个虚拟主机做 SSL 透传?【英文标题】:How to let nginx do SSL pass-through for multiple virtual hosts? 【发布时间】:2019-12-10 19:43:51 【问题描述】:我有多个本地 https 服务器在不同的端口上运行,并拥有自己的证书。现在,我想使用 nginx 使这些 https 服务器在不同的主机名下可用,端口 443 和 ssl 安全。
我当前每个主机名的配置看起来像
server
listen 443 ssl;
server_name hostname1;
ssl_certificate /etc/nginx/hostname1.cert.pem;
ssl_certificate_key /etc/nginx/hostname1.privkey.pem;
location /
proxy_pass ...
但是使用listen 443 ssl;
指令会强制我指定证书和密钥。相反,我想简单地从我的服务器传递该流量,因此我不必在 nginx 中维护二级证书,并且我的本地环境更接近生产环境。
针对单个服务器,F.X.在SSL Pass-Through in Nginx Reverse proxy? 中提供流的解决方案 但是,正如他/她所指出的,由于它只是转发 TCP,因此无法查看主机名并使其适用于多个服务器。
还有其他方法吗? 是否有一些基本的限制,这不能工作?
【问题讨论】:
【参考方案1】:这里的神奇概念是Server Name Indication,这是一个 TSL 扩展,它在 TSL Client Hello 中添加客户端所需的主机名,并允许服务器将连接映射到多个虚拟主机之一。
事实证明,F.X. 的答案。已经过时了,Dave T. 有a solution 使用两个较新的 nginx 模块,ngx_stream_ssl_preread 和 ngx_stream_map。有关详细信息,请参阅他在此网络上的回答。
【讨论】:
以上是关于如何让 nginx 为多个虚拟主机做 SSL 透传?的主要内容,如果未能解决你的问题,请参考以下文章