我意识到 serverfault 上关于这个问题有很多不同的变体,但我还没有找到适合我们情况的答案。
我们有一个运行 Apache 2.2 的 CentOS 6.2 Web 服务器,托管数十个具有相同父域的网站 - 例如 cat.example.com、bat.example.com、rat.example.com
我们想将 https 添加到部分(但不是全部)子域。https 子域将永久运行 https。例如http://bat.example.com将重定向至https://bat.example.com
我们已为 SSL 购买了 Comodo 多域 SSL 证书许可证,这使我们能够为多个域创建证书。Web 服务器只有一个面向公众的 IP。
我们如何设置 Apache 来做到这一点?如果 httpd.conf 中 bat.example.com 的虚拟主机条目是:
<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仍然有效,但重定向到https://bat.example.com?
答案1
您首先需要设置一个 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 虚拟主机。