如果客户端通过 IP 调用 Apache 服务器并且有两个 SNI 虚拟主机,会发生什么情况

如果客户端通过 IP 调用 Apache 服务器并且有两个 SNI 虚拟主机,会发生什么情况

我们有一个 Apache 2.4 网络服务器,其中有几个具有不同证书的虚拟主机。

我已经设置了基于 SNI 名称的虚拟主机:ap.mmm.com 和 ac.mmm.com,运行良好。全部使用相同的 IP(172.12.12.1)和相同的 443 端口。问题是:如果客户端使用 IP 而不是服务器名称访问 Apache 服务器,会发生什么情况:即使用 172.12.12.1:443 而不是 ap.mmm.com?

答案1

如果没有提供主机名(因此没有主机名匹配),它将显示该 IP/端口配置中的第一个主机名。“如果在包含最具体的匹配 IP 地址和端口组合的虚拟主机集中未找到匹配的 ServerName 或 ServerAlias,则将使用匹配的第一个列出的虚拟主机。”

SNI 相同,除非您使用 SSLstrictSNIVhostCheck。如果提供的服务器名称与其他虚拟主机不匹配,则将使用第一个(默认)虚拟主机来处理任何请求。有一个与使用基于名称的虚拟主机的 SNI 相关的指令 SSLStrictSNIVHostCheck,它控制是否允许非 SNI 客户端访问基于名称的虚拟主机。http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslstrictsnivhostcheck

如果它是一个共享主机,其网站可能不愿意通过 IP 加载来查看其他人的网站,我建议首先在 namevirtualhost 下方为每个 namevirtualhost 指令创建一个空白虚拟主机。一个用于 ssl(可能带有主服务器证书),一个用于端口 80。它将确保显示空白主机,而不是第一个真实网站。

相关内容