我目前使用 CNAME 静默地将所有流量引导至http://cdn.domain.com到我的 Rackspace Cloud Files 域http://cxxx.rxx.cxx.rackcdn.com。
现在我还想默默地将所有 HTTPS 流量导向https://cdn.domain.com到https://cxxx.ssl.cxx.rackcdn.com。
我认为我无法使用 CNAME 来做到这一点(如果可以的话,那真是太棒了!)所以我将使用 VirtualHosts,如下所示:
<VirtualHost *:80>
ServerName cdn.domain.com
RewriteEngine On
RewriteRule ^(.*)$ http://cxxx.rxx.cxx.rackcdn.com [L,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName cdn.domain.com
RewriteEngine On
RewriteRule ^(.*)$ https://cxxx.ssl.cxx.rackcdn.com [L,R=301]
</VirtualHost>
我是否需要第二个虚拟主机的 SSL 证书,或者它会从 Rackspace 的 HTTPS 域“借用”它?
答案1
您将需要 一份证书cdn.domain.com
。
您不能使用 CNAME,因为当浏览器获取cxxx.ssl.cxx.rackcdn.com
而不是 的证书时cdn.domain.com
,它会抛出一个错误,因为证书与您输入的 URL 不匹配。并且在 apache 中执行重定向时,重定向发生在 SSL 会话建立之后(并且需要证书来建立该 SSL 会话)。
另一个解决方案是在证书中为 提供备用名称cxxx.ssl.cxx.rackcdn.com
。基本上,证书将同时包含cxxx.ssl.cxx.rackcdn.com
和cdn.domain.com
。然后您可以使用 CNAME,因为同一个证书对两个主机名 (URL) 都有效。
答案2
您的子域名需要一个,因为该子域名所做的就是重定向访问者。
我很确定你不能用 CNAME 来做到这一点。
另一种方法是将数据从 HTTP 连接重定向到 HTTPS rackcdn 连接,如下所示:
<VirtualHost *:80>
ServerName cdn.domain.com
RewriteEngine On
RewriteRule ^(.*)$ https://cxxx.rxx.cxx.rackcdn.com [L,R=301]
</VirtualHost>