当我禁用某个网站时,为什么我的子域名会指向其他子域名?

当我禁用某个网站时,为什么我的子域名会指向其他子域名?

我有一台个人服务器,并在其上使用了许多子域名。
每个子域名都有自己独特的 SSL 证书设置,LetsEncrypt
每个子域名都有自己的 vhost 文件,/etc/apache/sites-available/
每个子域名都有自己的 A 记录和 NS 记录指向我的服务器。

出于某种原因,如果我使用 a2dissite 命令禁用我的一个子域(例如sub1.domain.com),然后尝试在 Web 浏览器中访问该网站,我会收到一条错误消息:

sub1.domain.com 使用无效的安全证书。
该证书仅在以下情况下有效:sub2.domain.com
错误代码:SSL_ERROR_BAD_CERT_DOMAIN

我已经验证 VHOST 文件确实使用了其适当的 SSL 文件。并且 VHOST 文件还具有适当的服务器名称,包括子域部分。

如果我为上述错误添加一个例外(作为一个选项),我会看到另一个子域,但 URL 保持与禁用的 URL 相同。

为什么当我禁用网站时,我的服务器会将我指向一个完全不同的子域?我以为它只是说无法访问,但它却将我重定向到另一个子域,我不确定如何控制它。

答案1

第一个配置的虚拟主机具有最高优先级,可以看作是默认或主服务器。这意味着,如果收到的请求与指定的 ServerName 指令之一不匹配,则将由第一个服务器提供服务。

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

在您的例子中,sub1.domain.com 指向您的 Web 服务器,但 Web 服务器没有配置与域匹配的虚拟主机。相反,内容和 SSL 证书默认域名提供服务。

答案2

最佳匹配集的基于名称的虚拟主机<virtualhost>将按照它们在配置中出现的顺序进行处理。将使用第一个匹配的 ServerName 或 ServerAlias,通配符的优先级没有差异(ServerName 与 ServerAlias 的优先级也没有差异)。

来源:Apache HTTP 服务器版本 2.4 - 使用基于名称的虚拟主机

据我所知,如果不重新编译就无法改变这个排序过程。

要更改虚拟主机的顺序,您可以/etc/apache/sites-available/像这样重命名 *.conf 文件:

/etc/apache/sites-available/000-default.conf
/etc/apache/sites-available/100-site-one.conf
/etc/apache/sites-available/200-site-two.conf

对于 Debian(Ubuntu 应该有类似的语法),我建议按以下顺序更改old-site-three.conf300-site-three.conf

$ sudo a2dissite old-site-three.conf

$ sudo mv /etc/apache/sites-available/old-site-three.conf /etc/apache/sites-available/300-site-three.conf

$ sudo a2ensite 300-site-three.conf

$ sudo apache2ctl configtest

$ sudo systemctl restart apache2.service

相关内容