Apache2错误匹配虚拟主机
问题描述:
我有一个虚拟主机的小问题。Apache2错误匹配虚拟主机
我的配置如:
<VirtualHost *:80>
ServerName www.site2.com
DocumentRoot /var/www/domains/site2.com
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/domains/site1.com
ServerName www.site1.com
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/....
SSLCertificateFile /etc/apache2/ssl/...
SSLCertificateChainFile /etc/apache2/ssl/...
</VirtualHost>
如果您输入以下网址到浏览器:
https://www.site1.com - OK(匹配的虚拟主机与/var/www/domains/site1.com的DocumentRoot)
http://www.site2.com - OK(匹配的虚拟主机与/var/www/domains/site2.com的DocumentRoot)
但是当我尝试site2.com以https protoco (https://www.site2.com)。 Apache使用/var/www/domains/site1.com DocumentRoot发现错误的Vhost ..
为什么?
感谢您的帮助。
答
这是因为您只有为site1配置HTTPS而不是site2。
你需要复制site1的虚拟主机配置和应用站点2的信息,以便它会看起来像下面这样:
<VirtualHost *:80>
ServerName www.site2.com
DocumentRoot /var/www/domains/site2.com
</VirtualHost>
<VirtualHost *:443>
ServerName www.site2.com
DocumentRoot /var/www/domains/site2.com
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/....
SSLCertificateFile /etc/apache2/ssl/...
SSLCertificateChainFile /etc/apache2/ssl/...
</VirtualHost>
<VirtualHost *:443>
ServerName www.site1.com
DocumentRoot /var/www/domains/site1.com
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/....
SSLCertificateFile /etc/apache2/ssl/...
SSLCertificateChainFile /etc/apache2/ssl/...
</VirtualHost>
我假设你有一个单独的SSL证书的其他网站或只是测试。
您还可能会碰到托管与HTTPS多个域只有一个服务器上的IP地址,你应该按照说明这里的问题:http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
答
这简直是虚拟主机在Apache中是如何工作的。首先检查TCP层IP:PORT组合的匹配。如果存在多个具有“最佳匹配”的虚拟主机,则会检查主机名(来自HTTP主机:标头)。
在你的简单情况下,这意味着在端口443上的请求的最佳匹配是单个*:443虚拟主机。它永远不会看比较差的匹配来找到匹配的主机名。