nginx:为什么一个域上的 SSL 配置会启用其他域?

nginx:为什么一个域上的 SSL 配置会启用其他域?

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

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

答案1

在没有看到您指定的配置的情况下,我将做出有根据的猜测。

在非 SSL HTTP 请求中,nginx 根据Host:浏览器发送的 HTTP 标头了解您请求的虚拟服务器配置。如果您发送的Host:标头与任何虚拟配置都不匹配,服务器将向您发送默认虚拟服务器配置,或者,如果缺少配置,则发送“第一个”配置(我认为“第一个”配置是指定的第一个虚拟服务器或按字母顺序排列的第一个域名)。

在 SSL HTTP 请求中,效果类似,只是当您的客户端建立连接时,nginx 知道要使用哪个 SSL 证书/密钥的唯一方法是通过您的客户端发送的服务器名称指示符 (SNI)。这发生在发送任何 Host: 标头之前,SSL 协商发生在发送任何 HTTP 流量之前。如果您的客户端不支持 SNI 扩展或 nginx 找不到指定匹配配置的配置,则 nginx 将再次默认使用默认虚拟服务器,或者如果没有,则使用“第一个”虚拟服务器。

因此,发生这种情况的原因在于您已将服务器配置为侦听 SSL 连接,无论发生什么情况,nginx 都会响应该请求。剩下的就是 nginx 寻找最佳配置来实现这一点,而对于 SSL 连接,app1.domain.com的 SSL 配置是唯一可用的配置。

相关内容