我的服务器分布两个主要网站,即:www.google.com 和 www.facebook.com(是的,我知道:p)
我希望它们通过 https 分发。使用 Apache,我在 sites-available/enabled 中定义了一个 vhost 文件,其中包含以下内容:
<VirtualHost *:80>
ServerName google.com
Redirect / https://www.google.com/
</VirtualHost>
<VirtualHost *:80>
ServerName facebook.com
Redirect / https://www.facebook.com/
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /srv/www/google/www/
ServerName www.google.com
ServerAlias www.facebook.com
<Directory ... />
# Google & Facebook points to the same directory (crazy right ?)
# Next of the config
</VirtualHost>
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /path/to/google.crt
SSLCertificateKeyFile /path/to/google.key
DocumentRoot "/srv/www/google/www/"
ServerName www.google.com
<Directory .../>
# Next of the config
</VirtualHost>
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /path/to/facebook.crt
SSLCertificateKeyFile /path/to/facebook.key
DocumentRoot "/srv/www/google/www/"
ServerName www.facebook.com
<Directory .../>
# Next of the config
</VirtualHost>
- 如果我访问https://www.google.com,httpS 正常运行
- 如果我访问https://www.facebook.com,httpS 可以正常工作。
- 如果我访问http://www.google.com,http 正常工作 # 没有 https!
- 如果我访问http://www.facebook.com,http 正常工作 # 没有 https!
但 :
- 如果我访问https://facebook.com,它失败了,说 SSL 连接不符合预期:Google.com 而不是 facebook.com
根据我的配置文件,我明白原因,所以我尝试添加:
<VirtualHost *:443>
SSLEngine On
ServerName facebook.com
Redirect / https://www.facebook.com/
</VirtualHost>
但是,我甚至无法通过 http/https 访问 facebook.com 和 www.facebook.com。
所以我的问题很简单:如何才能将所有对 facebook.com 的 https 访问(以及最终所有子 facebook:facebook.fr、www.facebook.fr 等)重定向到 HTTPS 中的 www.facebook.com(重定向到 www 域)?
感谢您的帮助 ! :)
答案1
这是因为您没有为 facebook.com 配置虚拟主机,因此 apache 会选择第一个配置的虚拟主机 (www.google.com)。您要查找的是服务器别名配置指令。
答案2
除非你有信噪比启用后(在 Windows XP 上的 IE 上不起作用),您不能在同一个 IP 上托管多个 SSL 证书。
您有时可以使用包含两个域的 SAN 证书(有时称为 UCC),但您当前尝试执行的方式不起作用。
答案3
需要了解的重要一点是,对于 HTTPS,在访问 Web 服务器之前会检查服务器 SSL 证书。这意味着服务器 SSL 证书必须包含要使用该 IP 地址访问的所有域名的名称服务器名称指示。由于某些客户端不支持 SNI,因此为了支持不同的 HTTPS 站点,对它们使用不同的 IP 地址是很常见的。
使用上面给出的代码,https://www.facebook.com将无法正常工作并会发出证书不正确的 SSL 警告。