HTTPS443端口不能像80端口一样复用的原因

#nginx 有时我们需要在一台主机(只有一个公网 ip)上部署多个 https 虚拟主机,如何实现呢?

假如我们想当然的使用如下的配置:

server{
 listen 443 default ssl;
 server_name www.test1.com;
 ssl_certificate xxxxx;
 ssl_certificate_key xxxxx;
}

server{
 listen 443 ssl;
 server_name www.test2.com;
 ssl_certificate xxxxx;
 ssl_certificate_key xxxxx;
}

当然是无法实现的,不论请求哪个主机,都只会收到默认域名www.test1.com的证书,这是 SSL 协议本身造成的–先建立 SSL 连接,再发送 HTTP 请求,因此 nginx 建立 SSL 连接时并不知道所请求的域名,所以只会返回默认的主机。


目前通过SNI可以实现443端口SSL复用

需要在创建HTTPS监听器时开启SNI功能。SNI(Server Name Indication)是为了解决一个服务器使用域名证书的TLS扩展,开启SNI之后,用户需要添加域名对应的证书。开启SNI后,允许客户端在发起SSL握手请求时就提交请求的域名信息,负载均衡收到SSL请求后,会根据域名去查找证书,如果找到域名对应的证书,则返回该证书;如果没有找到域名对应的证书,则返回缺省证书。

最后更新于