如何阻止对未启用 ssl 的虚拟主机的 HTTPS 请求转到第一个启用 ssl 的虚拟主机 (Apache-SNI)

Jef*_*eff 7 ssl virtualhost sni apache-2.2

我希望标题很清楚。

如何防止对未启用 ssl 的虚拟主机的 HTTPS 请求转到第一个启用 ssl 的虚拟主机(设置为 Apache-SNI)。

例如,使用我下面的缩写配置,https://example.comApache 在启用了 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>
Run Code Online (Sandbox Code Playgroud)

编辑:也许是第一个 ssl-vhost 中的 mod_rewrite 规则?

Mic*_*ton 7

正如 Apache 文档所说,当没有ServerName匹配 Web 请求中给出的主机名时,将使用第一个VirtualHost匹配的给定 IP/端口组合。

因此,您只需要提供一个不提供任何内容或您选择的内容的默认虚拟主机,并且它必须是 Apache 在加载其配置时解析的第一个虚拟主机。

如果您根本不希望通过 https 访问特定主机,请将它们放在一个单独的 IP 地址上,在该地址上您已将 Apache 配置为不在Listen端口 443 上。