我有多个本地 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;
指令强制我指定证书和 key 。相反,我想简单地传递来 self 的服务器的流量,这样我就不必在 nginx 中维护二级证书,并且我的本地环境更接近生产环境。
针对单个服务器,F.X.在 SSL Pass-Through in Nginx Reverse proxy? 中提供流解决方案然而,正如他/她指出的那样,因为它只是转发 TCP,所以无法查看主机名并使其适用于多个服务器。
还有其他方法吗?是否有一些基本的限制使它无法工作?
这里的魔法概念是Server Name Indication ,一个 TSL 扩展,它在 TSL Client Hello 中添加客户端所需的主机名,并允许服务器将连接映射到多个虚拟主机之一。
事实证明,F.X.的回答。已经过时了,Dave T. 有 a solution使用两个较新的 nginx 模块,ngx_stream_ssl_preread 和 ngx_stream_map。有关详细信息,请参阅他在此网络上的回答。
我是一名优秀的程序员,十分优秀!