我有一个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>
所以,访问:
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 ,但是我不认为这解决了您的问题,因为您的示例显示了使用了不同的域。 如果他们是共享通配符证书的子域名,这将工作。