我正在使用Apache2并命名虚拟主机从一个IP地址为两个不同的networkingexampletwo.com ( exampletwo.com和exampletwo.com )提供服务。 一个站点( exampleone.com应该是HTTP和HTTPS,而另一个站点( example2.com )应该只服务于HTTP。
到目前为止,我已经得到他们各自的HTTP网站按预期工作,我已经得到了HTTPS为它的目的网站工作 – 但是当我去https://exampletwo.com我被服务https://exampleone.com内容和安全警告。
我如何获得https://exampletwo.com请求被拒绝?
<VirtualHost 1.2.3.4:80> ServerName exampleone.com ServerAlias *.exampleone.com DocumentRoot /var/www/exampleone.com <Directory /var/www/exampleone.com> Options MultiViews AllowOverride None Order allow,deny allow from all </Directory> CustomLog /var/log/apache2/exampleone.log combined </VirtualHost> <VirtualHost 1.2.3.4:80> ServerName exampletwo.com ServerAlias *.exampletwo.com DocumentRoot /var/www/exampletwo.com <Directory /var/www/exampletwo.com> Options MultiViews AllowOverride None Order allow,deny allow from all </Directory> CustomLog /var/log/apache2/exampletwo.log combined </VirtualHost> <IfModule mod_ssl.c> <VirtualHost 1.2.3.4:443> ServerAdmin [email protected] ServerName exampleone.com ServerAlias *.exampleone.com DocumentRoot /var/www/exampleone.com <Directory /var/www/exampleone.com> Options MultiViews AllowOverride None Order allow,deny allow from all </Directory> CustomLog /var/log/apache2/exampleone-ssl.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. SSLCertificateFile /etc/ssl/certs/exampleone.com.crt SSLCertificateKeyFile /etc/ssl/private/exampleone.com.key </VirtualHost> </IfModule>
编辑:正如其他人指出的,看看SNI
正如所解释的那样,在通过https联系的服务器在发送证书之前无法猜测客户端想要与之通话的域名。
如果http://exampleone.com由https服务,则意味着访问者从服务器获得的第一件事是“嗨,我的证书对于http://exampleone.com是有效的”,即使你想要http://exampletwo.com 。 因此,您不能为https://exampletwo.com停用https,也不能设置redirect或任何不会导致访问者警告的内容。
更多的解释在这里
为了解决您的问题,您需要两个不同的IP地址来提供您的两个域名。
您可以启用SNI。 你所要做的就是在你的Listen 443语句中包含一个NameVirtualHost *:443 (在ubuntu的apacheconfiguration文件中,将它添加到/etc/apache/ports.conf中)。 然后,您可以configuration第二个SSL虚拟主机,并为它们分配一个ServerName 。
注意:旧版浏览器不支持SNI。 例如,在Windows XP上没有IE的版本。 在这种情况下,每个站点的IP地址限制user2299bla提到是有效的。