同一IP下同时建两个网站并且同时开启HTTPS小记
TLS SNI是关键
- 想这么搞是很久前的事了,但是当时试了一下之后发现同一个IP只能开一个HTTPS,后来有一天在TG群里面收到一个dalao指点,得知还有TLS SNI,然后就试了一下,完美解决
示例链接
下面开始说一下部署过程
- 查看已安装的 Nginx 是否开启 TLS SNI,命令如下:
nginx -V
查看输出结果,如果
TLS SNI support disabled
表示没有开启,没有开启的话就需要手动开启一下了,开启教程可以参考BelinChung 通过开启 Nginx TLS SNI 来支持同一 IP 下多 SSL 证书
- 但是lnmp一键包默认TLS SNI是支持的,这就省了一步,在实现同一IP下多HTTPS时一个常见的问题就是当使用同一个 IP 地址去配置两个或更多的HTTPS服务器的时候,出现证书不匹配的情況:
- 这种情况下浏览器会获取默认的服务器证书(如上面例子的 www.example.com.crt)而忽视请求的服务器名,如输入网址:www.example.org,服务器会发送 www.example.com.crt 的证书到客戶端,而不是 www.exaple.org.crt。
这是因为 SSL 协议行为所致,SSL 连接在浏览器发送 HTTP 请求之前就被建立,Nginx 并不知道被请求的服务器名字,因此 Nginx 只会提供默认的服务器证书。
- 解決这个问题最原始最有效的方法就是为每个 HTTPS 服务器分配独立的 IP 地址:
- 然后打开网站去试试吧,理论上来说应该适用于同一IP下建N个网站同时启用HTTPS,但是我没有试验过。。。
- 有任何问题欢迎留言讨论