nginx:为什么在一个域的SSLconfiguration启用其他的?

假设我有app1.domain.comapp2.domain.com ,以及它的基本configuration文件app1.confapp2.conf ,在vhosts.d文件夹内。

SSLconfiguration文件应该包含应用程序的path和证书的path。 但是,为什么仅在app1( app1.ssl.conf )中添加SSLconfiguration文件app1.ssl.conf在app2上启用SSL? 我的意思是,我可以进入https://app2.domain.com ,从app1的SSLconfiguration中获取SSL密钥path。

没有看到你指定的configuration,我会做出一个有教养的猜测。

在非SSL HTTP请求中,nginx根据您的浏览器发送的HTTP Host:头来知道您要请求的虚拟服务器configuration。 如果您发送的Host:标头与您的任何虚拟configuration不匹配,则服务器会将您发送到默认的虚拟服务器configuration,或者缺less一个configuration的“第一个”(“第一个”configuration,我相信,指定的第一个虚拟服务器或按字母顺序排列的第一个域名)。

在SSL HTTP请求中,除非客户端build立连接,否则效果是相似的,nginx唯一的方法是通过客户端发送的服务器名称指示符(SNI)知道要使用哪个SSL证书/密钥。 这发生在任何主机:标头发送之前,在任何HTTPstream量发送之前发生SSL协商。 如果您的客户端不支持SNI扩展,或者nginx无法find指定匹配configuration的configuration,则nginx将再次默认为默认虚拟服务器,或者缺less“第一个”虚拟服务器。

所以,它发生的原因是因为你有一个服务器configuration为侦听SSL连接,并且来到地狱或高水位,nginx将会响应这个请求。 剩下的就是nginxfind最好的configuration,而对于SSL连接, app1.domain.com的SSLconfiguration是唯一可用的configuration。