虚拟主机一个https网站,其余的http

我有一个Apache2的linode服务器,运行一些虚拟主机的站点。

所有的网站在80端口上工作正常,但一个网站有一个SSL证书,也运行良好。

我的问题如下:

非https网站,如果访问https://domain.com – 显示唯一的安全网站的内容…

有没有办法禁用这些非安全网站的*:443匹配?

谢谢!

编辑(更多信息):

以下是站点中的典型configuration – 可用于正常的不安全的http站点:

<VirtualHost *:80> ServerName www.insecure.com ServerAlias insecure.com ... </VirtualHost> 

安全的https站点如下所示:

 <VirtualHost *:80> ServerName www.secure.com Redirect permanent / https://secure.com/ </VirtualHost> <VirtualHost *:80> ServerName secure.com RedirectMatch permanent ^/(.*) https://secure.com/$1 </VirtualHost> <VirtualHost *:443> SSLEngine on SSLProtocol all SSLCertificateChainFile ... SSLCertificateFile ... SSLCertificateKeyFile ... SSLCACertificateFile ... ServerName secure.com ServerAlias secure.com ... </VirtualHost> 

所以,访问:

  • http:/insecure.com – 工作
  • http:/ / www.insecure.com – 工作
  • http:/secure.com – redirect到https:/secure.com – 起作用
  • http:/www.secure.com – redirect到https:/secure.com – 正常工作
  • https:/insecure.com – 显示https:/secure.com – 错误!

Apache文档build议在NameVirtualHost行上指定非SSL端口号,如下所示:

NameVirtualHost 192.168.1.1:80

这有帮助吗? 它应该停止不安全的站点匹配。 否则,请尝试将安全站点移到第一个VirtualHosts。

问题是HTTPS不使用主机头,因为证书交换发生在客户端连接到443的时候。所以虽然你可以使用mod_rewrite把https://insecure.comredirect回基于http://insecure.com在HTTP_HOST上。 在用户出现与主机名不匹配有关的证书警告之后。

但是像这样的东西应该在你的httpsconfiguration块中工作

 RewriteCond %{HTTP_HOST} !^secure\.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^/(.*) http://%{HTTP_HOST}/$1 [L,R] 

如Peter所说,将VirtualHost绑定到一个明确的IP。 如果你有多个IP地址就可以解决你的问题。

如果您使用的是单一IP,请确保在您的:443 VirtualHost中定义一个显式的ServerName。

另外请记住,Apache有默认的VirtualHosts,这也可能是对你的工作。 无论首先为给定端口定义VirtualHost成为默认值。 我经常发现自己定义了明确的虚拟主机来解决这个问题。 也许在你的情况下,你可以创build一个丢弃的VirtualHost并连接一个自签名的证书。 这应该允许你明确定义的网站自己生活。

编辑:考虑到Doon的评论,我收回我对ServerName的评论。

您可能希望查看Apache wiki上的NameBasedSSLVHosts ,但是我不认为这解决了您的问题,因为您的示例显示了使用了不同的域。 如果他们是共享通配符证书的子域名,这将工作。