我正在使用 Apache2 并命名虚拟主机从一个 IP 地址为两个不同的 dotcom (exampleone.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
。因此,您不能为 停用 httpshttp://exampletwo.com
,也不能设置重定向或任何不会导致访问者警告的内容。更多解释在这里
为了解决您的问题,您需要两个不同的 IP 地址来为您的两个域名提供服务。
您可以启用 SNI。您所要做的就是
NameVirtualHost *:443
在您的Listen 443
声明中包含一个(在 ubuntu apache 配置中,将其添加到 /etc/apache/ports.conf)。然后,您可以配置第二个 SSL 虚拟主机,并为它们提供一个ServerName
.注意:旧浏览器不支持 SNI。例如,Windows XP 上没有 IE 版本。在这种情况下,user2299bla 提到的每个站点限制的 IP 地址是有效的。