如何设置Apache,以便跨多个子域的某些网站始终使用https

我意识到在serverfault上这个问题有很多不同的变化,但是我没有把结果合并来匹配我们的情况。

我们有一个运行Apache 2.2的CentOS 6.2 web服务器,它托pipe着几十个具有相同父域的网站 – 例如cat.example.com,bat.example.com,rat.example.com

我们希望将https添加到这些子域的一些(但不是全部)。 https的子域将永久运行https。 例如, http://bat.example.com会redirect到https://bat.example.com

我们已经为SSL购买了Comodo多域SSL证书许可证,允许我们为多个域创build证书。 Web服务器只有一个面向公众的IP。

我们如何设置Apache来做到这一点? 如果bat.example.com的httpd.conf中的虚拟主机条目是:

<VirtualHost *:80> ServerName bat.example.com DocumentRoot /var/www/sites/bat ErrorLog logs/bat-error_log CustomLog logs/bat-access_log common </VirtualHost> 

在bat.example.com上启用SSL需要做什么修改,并确保http://bat.example.com仍然有效,但redirect到https://bat.example.com ?

您首先需要设置SSL VirtualHost,如下所示:

 <VirtualHost *:443> ServerName bat.example.com DocumentRoot /var/www/sites/bat ErrorLog logs/bat-error_log CustomLog logs/bat-access_log common SSLEngine on SSLCertificateFile /path/to/cert SSLCertificateKeyFile /path/to/key </VirtualHost> 

在您的非SSL虚拟主机中,您将需要一些Rewrite指令来强制请求到相应的SSL虚拟主机。 所以,对于你所拥有的附加指令,大致如下:

  RewriteEngine on RewriteRule ^/(.*) https://bat.example.com/$1 [R,L] 

所以,对普通HTTP虚拟主机的所有请求都将被重写到SSL虚拟主机。