访问禁用 ssl 的域的 https 版本会显示不同的页面

Posted

技术标签:

【中文标题】访问禁用 ssl 的域的 https 版本会显示不同的页面【英文标题】:Visiting https version of domain which has ssl disabled shows a different page 【发布时间】:2018-11-21 22:09:36 【问题描述】:

我使用 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 或者至少应该包含默认根 /var/www/html

【问题讨论】:

【参考方案1】:

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

<VirtualHost *:80> (== Any, port 80) 将匹配http://IP 的请求 <VirtualHost XXX.XXX.XXX.XXX:443> 将匹配请求与 http://XXX.XXX.XXX.XXX 但是如果 XXX.XXX.XXX.XXX 是 == 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>

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

部分解决方案

我在这里使用您的&lt;VirtualHost&gt; 设置。所以

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

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

where XXX.XXX.XXX.XXX == IP1

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

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

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

【讨论】:

以上是关于访问禁用 ssl 的域的 https 版本会显示不同的页面的主要内容,如果未能解决你的问题,请参考以下文章

不支持SSL时对HTTPS请求进行规范处理

重定向http到https是一个坏主意?

怎么使用Nginx配置ssl实现https访问的方法

不同域的 FCM 凭据

宝塔ssl部署完,https无法访问故障解决

访问。将排除的子文件夹重定向到域的 https 版本,其他所有内容都被重定向到另一个域