- A+
在Apache HTTP服务器上,一个IP地址建立多个虚拟主机站点后,如何给每个站点配置SSL证书,以提高站点网络传输的安全性,是站长不可或缺的工作。下面以阿里云ECS为例,完成Apache配置多个ssl 站点步骤:
1 在Apache服务器上开启443端口
ssl(https)访问需开启443端口。在ECS控制台上找到安全--防火墙,填加规则:
- 应用类型:HTTPS
- 协议:TCP
- 端口:443
2 上传SSL证书文件到Apache服务器
为每个虚拟主机域名申请获取SSL证书文件
SSL证书有收费版和免费版,某些域名商提供在其处购买域名同时赠送SSL证书服务。每个域名的SSL证书申请后下载获取到本地,都会有三个文件:
- *_public.crt:证书文件
- *_public.crt:证书链文件
- *.key:证书密钥文件
如在某处获处的文件后缀不同,需要转换后方可使用。
上传每个域名SSL证书(相对应三个文件)
可用putty等工具远程连接ECS后,在/usr/local/apache/(默认)目录下创建几个与域名相对应的文件夹。例:cert1,cert2,cert3
可用pscp等工具将每个域名SSL证书分别上传至刚创建的对应文件夹中。例:域名1SSL证书上传到cert1,域名2SSL证书上传到cert2,域名3SSL证书上传到cert3中。(各域名对应的文件夹的路径后面配置中要用到)。
3 修改httpd.conf文件
用putty等工具远程连接ECS后,用vim编辑httpd.conf (vim中按下ESC后“q”退出,"wq!"保存退出,"q!"不保存退出)vim /usr/local/apache/conf/httpd.conf
(默认路径)
删除以下两行行首的配置语句注释符号"#"
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
添加以下一行行首的配置语句注释符号"#"
ProxyPassMatch ^/(..php(/.)?)$ unix:/home/www/logs/php-fpm.sock|fcgi://127.0.0.1/
在httpd.conf末尾添加以下内容:(访问http时自动转让自https)
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>
4 修改httpd-ssl.conf文件
用vim编辑httpd-ssl.conf文件,vim /usr/local/apache/conf/extra/httpd-ssl.conf
删除以下几行行道的配置语句注释符号"#" # Listen 443 # SSLStrictSNIVHostCheck off # SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4 # SSLHonorCipherOrder on # SSLProtocol all -SSLv2 -SSLv3 # SSLProxyProtocol all -SSLv3 # SSLPassPhraseDialog builtin
在httpd-ssl.conf中为每个域名主机增加以下内容
<virtualHost *:443>
DocumentRoot "/home/www/hdocs/dfsgwdg/wordpress" #域名文件的路径#
ServerName dlosfslg.cn #域名名称#
ServerAlias www.dlosfslg.cn #域名别名#
SSLEngine on
SSLCertificateFile cert/www.dlosfslg.cn.crt #域名SSL证书文件路径#
SSLCertificateKeyFile cert/www.dlosfslg.cn.key #域名SSL证书密钥文件路径#
SSLCertificateChainFile cert/www.dlosfslg.cn_ca.crt #域名SSL证书链文件路径#
<Directory "home/www/hdocs/dfsgwdg/wordpress"> #域名文件夹路径#
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/home/www/logs/php-fpm.sock|fcgi://127.0.0.1/home/www/hdocs/dfsgwdg/wordpress/ #换成你域名文件夹路径#
</VirtualHost>
#如有多个域名,就继续增加#
<virtualHost *:443>
....
<Directory.....>
...
</Directory>
...
</VirtralHost>
5 测试
修改httpd.conf和httpd-ssl.conf文件保存退出后,重启Apache服务器使SSL生效。
停止Apache服务
/usr/local/apache/bin/apachectl -k stop
启动Apache服务
/usr/local/apache/bin/apachectl -k start
运行中直接重启Apapche服务
/usr/local/apache/bin/apachectl -k restart
重启Apache后,在浏览中访问分别访问不同原域名时,网页地址栏出现小锁标志,表示SSL多站点安装成功。