![如何禁用特定虚拟主机的 https 访问?](https://linux22.com/image/606720/%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8%E7%89%B9%E5%AE%9A%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9A%84%20https%20%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
好的,我已经使用以下指令设置了一个 Apache 服务器:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
ServerAlias *.example2.com
DocumentRoot /var/www/example2
</VirtualHost>
<VirtualHost example1.com:443>
DocumentRoot /var/www/html
ServerName example1.com:443
SSLEngine on
...
</VirtualHosts>
因此 example1.com 支持 SSL,可以通过 http:// example1.com 或 https:// example1.com 访问。但是,这会产生意想不到的副作用,即当我在浏览器中访问 https:// example2.com 时,会显示 https:// example1.com。我想要做的基本上是以某种方式禁用 https:// example2.com 或将其重定向到 http:// example2.com,这样当我访问它时就不会收到警告和错误的网站。
答案1
您将无法避免收到警告,除非 example1 和 example2 位于不同的 IP 地址,或者您获得涵盖两个名称的 SSL 证书——在建立 SSL 连接之前不会出现错误页面或重定向。
话虽这么说,但按照这样的思路应该可以奏效:
NameVirtualHost *:443
<VirtualHost *:443>
ServerName example1.com
SSLEngine on
#...
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
SSLEngine on
# same certificate config here as on example1, unless you're wanting to use TLS SNI
# then, let's redirect the user to non-SSL
Redirect permanent / http://example2.com/
</VirtualHost>
答案2
我不认为你应该把 :443 放在 ServerName example1.com:443 上
这些应该正确配置
<VirtualHost example1.com:443> //change example1.com to ip address is a good habit
DocumentRoot /var/www/html
ServerName example1.com
SSLEngine on
...
</VirtualHosts>
答案3
您需要有服务器名称指示 (SNI) 才能实现此目的。请参考链接:http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI了解详情。