所以我有一个单一 IP 的服务器和很多网站,都托管在 nginx 下。这是我实际设置的非常简化的简化:
server {
listen 80;
listen 443 ssl;
server_name ssl.example.com;
#...
}
server {
listen 80;
server_name nossl.example.com;
#...
}
如果我ssl.example.com:443
按预期连接到一切正常。
如果我连接到nossl.example.com:443
,它会尝试提供ssl.example.com:443
.
我已经明白为什么会发生这种情况(这就是 ssl+nginx 与虚拟服务器最匹配的方式),我只需要阻止它从错误的站点发送内容。
没有为我的所有网站购买证书(或颁发我自己的证书),或者将 SSL 网站推到自己的 IP 上,我在这里有什么选择?nginx 可以仔细检查每个 SSL 请求的域并确保它匹配server_name
吗?
添加以下虚拟服务器:
如果没有匹配的主机,Nginx 将使用这个作为最后的手段并返回一个错误。
它需要 SSL 证书才能工作,但您可以非常快速地生成其中一个自签名证书,这样就可以了。这比为另一个域共享一个有效的现有证书(无论如何都会引发错误)要好,因为泄漏更少。
我倾向于认为#2 是最合适的答案,但我发现以下内容在放置在非 ssl 虚拟服务器的服务器块上方时也可以正常工作。
不要使用“ssl”标志。