我有一台服务器提供多个SSL虚拟主机和非SSL虚拟主机。 如果使用“https”访问其中一个非SSL虚拟主机,则使用第一个SSL指令。 是否有一些设置,以便只有显式匹配服务器名称的虚拟主机才能使用?
所以,假设我有www.a.com
, www.b.com
和www.c.com
。
比方说,我也有https://www.a.com
和https://www.b.com
。
如果我去https://www.c.com
,就和使用网站https://www.a.com
。 这是不受欢迎的行为。 有什么我可以设置,以便没有网站将被使用?
我不相信,因为Apache只会读取它看到的第一个443端口,并将其呈现给用户。
你可以在里面提供一个带有.htaccess页面的空白目录,它可以捕获进来的内容并redirect到http版本。 您可以使用以下方法来执行此操作:
RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
不要忘记把.htaccess目录下的httpd.confconfiguration放在第一个443入口之前。
您必须具有SSL连接的默认虚拟主机。 但是它不必包含任何内容,因此您可以为此创build一个新的虚拟主机并使用自签名证书。
该默认虚拟主机必须configuration为支持一个新的足够SSL版本从客户端接收SNI [来源: Apache Wiki ]。 它可以configurationSSLStrictSNIVHostCheck来禁止没有SNI支持的客户端。
据我所知,从这些链接可以看出,支持SNI的客户端,报告一个没有明确的匹配虚拟主机的域名,将永远终止在默认的虚拟主机上,这就是为什么你可能需要一个没有内容的虚拟主机。
对于没有HTTPS的域来说,这两种方法都不是很好,因为它不会提供良好的用户体验。 相反,我build议您在所有域上都支持HTTPS(可以免费获得证书),或者在有和没有HTTPS支持的情况下使用不同的IP地址。
为不使用SSL的虚拟主机使用一个IP地址,为使用SSL的虚拟主机使用单独的IP地址。 确保用于SSL的Listen
和VirtualHost
指令明确指定该IP地址,而不是例如*:443
。