Nginx在vhost和SSL之间发出问题

我在同一个IP中有两个站点,具有以下配置:

> site1.com

>倍数子域(即:foo.site1.com,bar.site1.com)
>一切都在80端口监听,443没有

> site2WithSSL.com

>侦听端口80和443(SSL)

我可以毫无问题地访问https://site2WithSSL.comhttp://site1.com.当有人想访问https://site1.com时会出现问题,使用site2WithSSL.com的Nginx答案我希望避免这种情况.我的意思是,每当有人访问https://site1.com时,不必返回内容或仅重定向到https://

配置是:

server {
     listen      80;
     server_name    *.site1.com;

     // ...
}

server {
     server_name www.site2WithSSL.com;
     return 301 $scheme://site2WithSSL.com$request_uri;
}

server {
     listen 80;
     listen 443 ssl;
     server_name site2WithSSL.com;
     ssl_certificate site2WithSSL.crt;
     ssl_certificate_key site2WithSSL.key;

     // ...
 }

解决:为每个站点使用不同的IP

最佳答案
您的问题是SSL不支持同一IP上的多个虚拟主机.

Nginx通过HTTP / 1.1接收到新连接时,该请求包含一个HOST标头,指定要服务的虚拟主机(这是1.1中的重大变化,并允许我们今天所知的虚拟主机).

但是使用HTTPS,标头是加密的,密钥交换和TLS层必须先建立才能解密.换句话说,在发送SSL证书之前,Nginx无法选择正确的SSL服务器块.

您可以在site2的配置下添加重定向匹配site1的域名,但是用户仍会收到一条消息,说明证书无效,因此不太适合.

您可以使用一些多域证书,但它会花费您的成本.

最简单的,也是您想要的配置,可能是最佳选择,是为每个站点使用不同的IP地址.不同的Nginx服务器配置可以绑定到不同的地址,因此从来没有任何关于哪个地址的问题.大多数提供商可以为您提供多个IP地址,有些甚至可以提供多个块,当然,在云端,您可以提供更多.

更新:SNI通过将主机标头移动到加密的有效负载之外来解决此问题,并且受现代浏览器的支持.

相关文章

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一...
本地项目配置 1 复制 luffy/settings/dev.py为prop.py 修改l...
nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看...
一 、此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] ng...
###进入nginx 目录cd /usr/local/nginx###递归显示 2 级目录...
在cmd命令窗口输入下面命令进行查看 tasklist /fi "ima...