我希望这个标题很清楚。
如何防止未启用 ssl 的虚拟主机的 HTTPS 请求进入第一个启用 ssl 的虚拟主机(设置为 Apache-SNI)。
例如,使用下面的缩写配置,https://example.com
Apache 在启用 ssl 的 vhost 上为 (非 ssl vhost) 提供请求https://example.org
。我想禁用该行为,并可能使用适当的 HTTP 响应代码进行回复 (不确定那是什么)。
这也许根本不可能,但我想我还是会问一下。
# I actually have a SNI setup, but it's not demonstrated here.
# I don't think it's relevant in this situation.
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerName example.org
</VirtualHost>
<VirtualHost *:443>
ServerName example.org
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
</VirtualHost>
编辑:第一个 ssl-vhost 中也许有一个 mod_rewrite 规则?
答案1
正如 Apache 文档所述,当没有ServerName
匹配的 Web 请求中给出的主机名时,VirtualHost
将使用第一个匹配的给定 IP/端口组合。
因此,您只需要提供一个不提供任何内容或提供您选择的内容的默认虚拟主机,并且它必须是 Apache 在加载其配置时解析的第一个虚拟主机。
如果您根本不希望特定主机通过 https 访问,请将它们放在单独的 IP 地址上,并在该 IP 地址上将 Apache 配置为不运行Listen
端口 443。
答案2
我知道,已经有一段时间了...但是SSLStrictSNIVHostCheck选项。据我了解,这解决了您的问题。