![如何在 VHOST Apache2 中限制一个域的 SSL](https://linux22.com/image/722023/%E5%A6%82%E4%BD%95%E5%9C%A8%20VHOST%20Apache2%20%E4%B8%AD%E9%99%90%E5%88%B6%E4%B8%80%E4%B8%AA%E5%9F%9F%E7%9A%84%20SSL%20.png)
我已经在 apache2 上配置了 Vhost。这是一个基于名称的配置。第一个域名是 SSL 安全的,第二个是非 SSL 安全的站点。如果在浏览器地址栏中输入,则所有域名都运行正常https://www.domain1.com/page1/和http://domain2.com/page2/.但如果我尝试访问https://domain2.com/page1/并尝试加载不安全的页面1,但该页面在domain2.com上不可用。
如果我从 ssl 检查器 domain2 检查是否也获得相同的 ssl 证书
我的期望是它不应该加载页面1,因为它不存在。并且如果从ssl检查器检查,应该不会再找到ssl证书。请问如何防止这种情况发生。提前谢谢了。
我的配置可以在下面的文件夹“/etc/apache2/sites-available”示例中找到 域名1.com.conf
<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
</VirtualHost>
<VirtualHost *:443>
ServerName domain1.com
ServerAlias *.domain1.com
DocumentRoot /var/www/domain1.com/public_html
SSLCertificateFile "path/domain1_com.crt"
SSLCertificateKeyFile "path/domain1_.key"
SSLCACertificateFile "path/domain1.ca-bundle"
</VirtualHost>
域名2.com.conf
<VirtualHost *:80>
ServerName domain2.com
ServerAlias *.domain2.com
DocumentRoot /var/www/domain2.com/public_html
</VirtualHost>
答案1
Apache 始终有一个默认 SSL 主机。在本例中,它将是 domain1.com vhost,因为可能没有其他主机。
有两种方法。
- 仅使用警告/消息设置不同的默认虚拟主机。
第一个配置在词汇上获胜。因此,如果您有一个 0000.conf,它通常会成为默认虚拟主机。您可以在那里放置一条警告消息,并使用 mod_rewrite 将所有请求重定向到它。
RewriteEngine 开启 重写规则 ^/?warning\.html$ - [L] 重写规则 .* /warning.html [L]
- 在您的 vhost 中使用 mod_rewrite 过滤主机头并显示失败或消息以“拒绝”其他主机头。
RewriteEngine 开启 RewriteCond %{HTTP_HOST} !^your\.host$ RewriteCond %{HTTP_HOST} !^www\.your\.host$ 重写规则 .* - [F]
当然,只有当人们首先接受 SSL 警告时,他们才会看到服务器响应。
答案2
解决方案
就我而言,我已经更改了基于配置名称和基于 ip 的混合类型。对于 ssl 安全站点来说,是基于 ip 的配置。
步骤1:为 ubuntu 服务器分配多个 ip 地址。
第2步:使用单独的 IP 地址注册 DNS。所有安全域都有单独的 IP 地址,其余域非 SSL,为每个域分配一个 IP 地址。
步骤3:在终端“hostname -I”中检查本地 IP
步骤4:将“*”替换为本地 IP 地址
它将限制通过 https 加载 domain2,抛出 404