如何禁用特定虚拟主机的 https 访问?

如何禁用特定虚拟主机的 https 访问?

好的,我已经使用以下指令设置了一个 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了解详情。

相关内容