0

我使用 Webmin/virtualmin 并且有几个虚拟主机:

Virtual Server  Any         80  Automatic   /var/www/html
Virtual Server  Any         80  website1.nl /home/website1/public_html
Virtual Server  XX.XX.XXX.X 443 website1.nl /home/website1/public_html
Virtual Server  Any         80  website2.nl /home/website2/public_html

网站 1 启用了 SSL,但网站 2 没有。

每当我去https://website2.nl它时,它都会触发website1.nl:443. 这是因为 website2 没有自己的 443 vhost。

我试图添加这个:

Virtual Server  XX.XX.XXX.X         443 Automatic   /var/www/html

但它永远不会触发...

我想阻止这种情况发生。它应该是 404 或者至少应该包含默认的 root /var/www/html

4

1 回答 1

0

如果服务器上只有 1 个 IP:

如果两个域都在同一个 IP 上,则对端口 :443 的请求将被 Apache 理解为发送到唯一<VirtualHost>匹配的 XXX.XXX.XXX.XXX:443,而不管涉及的域名如何。匹配<VirtualHost>和证书协商发生域名被识别之前。

即使有很多,Apache 也会采用配置中的第一个(自上而下),因为 SSL 握手是在请求的域名完成之前完成的。

如果服务器上有 2 个 IP

为您的域设置单独的 IP。IP 分隔允许 Apache 知道您想要哪个站点。所以:

<VirtualHost IP1:80>
    ServerName website1.nl
    [...]
</VirtualHost>

<VirtualHost IP2:443>
    ServerName website2.nl
    [...]
</Virtualhost>

这样,对 http s ://IP1/ 的请求将被 Apache 简单地拒绝,因为没有 VirtualHost 匹配。但设置第二个 IP 并不总是可行的。

部分解决方案

在这里,我使用您的<VirtualHost>设置。所以

<VirtualHost IP1:80>
    ServerName website1.nl
    [...]
</VirtualHost>

<VirtualHost XXX.XXX.XXX.XXX:443>
    ServerName website2.nl
    [...]
</VirtualHost>

where XXX.XXX.XXX.XXX == IP1

您可以在 *:443<VirtualHost>中设置一个 RewriteRule,表示将对 website1.nl 的请求重定向回 IP1:80。

RewriteCond %{HTTP_HOST} website1.nl
RewriteRule (.*) http://IP1:80/$1

这样做的一个问题是您的 SSL 证书很可能是为 website2.nl 设置的,因此浏览器会注意到请求的域名是 website1.nl,因此与证书不匹配。这就是为什么它是部分解决方案。您可以将证书设置为涵盖两个域,从而消除此问题,这取决于您对证书创建的控制级别(是否完全灵活)。

于 2018-06-13T13:00:50.917 回答