如何禁用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,或者将它redirect到http:// example2.com,所以当我访问它时,我不会收到警告和错误的站点。

除非example1和example2位于不同的IP地址,否则您将无法避免发出警告,或者您获得了涵盖两个名称的SSL证书 – 直到SSL连接build立之后,才会出现错误页面或redirect。

话虽如此,沿着这些线应该工作:

 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> 

我不认为你应该把:443 ServerName example1.com:443

这些应该是正确的configuration

 <VirtualHost example1.com:443> //change example1.com to ip address is a good habit DocumentRoot /var/www/html ServerName example1.com SSLEngine on ... </VirtualHosts> 

最好为需要SSL的站点使用单独的IP。

或者,要添加redirect,每个域需要443个虚拟主机。 要删除SSL警告,您需要每个站点的有效证书。

有一个安全的虚拟主机,虽然。 原始forms的SSL不关心主机名。 它打开一个IP地址的SSL会话,build立一个安全连接,然后提供数据。 默认/第一主机将始终交付给这些客户端。

在SSL握手之前,较新版本的OpenSSL和客户端已经添加了“ 服务器名称指示 ”扩展名。 这允许基于SNI的SSL虚拟主机 。 所以这只适用于wiki页面上列出的新浏览器 。 旧的浏览器将被卡住。

您需要具有服务器名称指示(SNI)来完成此操作。 有关详细信息,请参阅http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI