如何配置 Apache,以便没有 SSL 的 vhost 不会被第一个带有 SSL 的 vhost 应答?

如何配置 Apache,以便没有 SSL 的 vhost 不会被第一个带有 SSL 的 vhost 应答?

当 Apache (v2.4) 将请求分配给 vhost 时,它将使用所有配置中第一个匹配的 ServerName/ServerAlias,但如果没有匹配,它将使用第一个(忽略 ServerName/ServerAlias 定义)。

https://httpd.apache.org/docs/2.4/vhosts/details.html

配置文件中针对给定 IP:端口对的第一个基于名称的虚拟主机非常重要,因为它用于在该地址和端口上接收的所有请求,而对于该 IP:端口对,没有其他虚拟主机具有匹配的 ServerName 或 ServerAlias。

我遇到的问题是在带有控制面板的共享主机上。有些域有 SSL 证书,有些则没有。当有人尝试使用 HTTPS 访问没有证书的域时,我宁愿在安全警告后返回 404,而不是其他人的内容。

我尝试设置一个与 ServerAlias * 匹配的 *:443 虚拟主机,但没有成功。我已成功设置一个分别匹配每个 IP:443 的万能虚拟主机,但这意味着我必须记住在将 IP 添加到服务器时编辑此文件。

有没有办法配置显式的 ServerName/ServerAlias 匹配,以便 vhost仅有的匹配特定的主机名,或者配置具有共享 SSL 证书的更高优先级“catchall”虚拟主机是解决此问题的唯一方法?

相关内容