环境:Apache2.2 + Centos 6.8
最近做网站需要用到https,像百度、京东那样,浏览器上有个绿色的小锁头,同时数据加密也是网站很大的保障。由于是临时测试的,所以在阿里云上面买了个赛门铁克的免费型的证书。(中间申请部分略过)证书最后颁发的时候,可以在列表页操作下载,进入下载页,选择Apache,然后可以按照上面的官方的文档配置,但是不需要这么做,刚开始弄这个的人,估计度娘谷歌了很久还是懵逼,因为最后在地址栏输入域名刷新的时候,却不是自己想要的效果。要这么来,保准你次次都行。
咋们先要这么想:比如我手上有个一个域名anspoon.com,那既然是要全站强制跳转https,那就要配两个虚拟主机,一个是监听80端口的,这个虚拟机只做监听和转发的工作,不用配置啥站点根目录。
还有一个是监听443端口的,这个做真正的访问工作,除了需要配置原本没有ssl之前80虚拟机需要做的工作外,还要开启ssl引擎验证、指定证书位置、私钥(私钥都放自己的服务器上用来接收请求的时候解密数据用的;公钥是访问的时候,客户端会下载),看懂了上面的话,下面的配置就不成问题了。
#记得监听这个端口
Listen 443
#load这个ssl模块进来
LoadModule ssl_module modules/mod_ssl.so
<VirtualHost *:80>
ServerName www.aaa.com
ServerAlias aaa.com
RewriteEngine on
RewriteRule ^(.*)?$ https://www.aaa.com$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerAdmin aaa@163.com
DocumentRoot "/home/aaa/webroot"
ServerName www.aaa.com
#开启ssl引擎
SSLEngine on
#写你证书的路径
SSLCertificateFile /etc/httpd/cert/public.pem
#写你私钥的路径
SSLCertificateKeyFile /etc/httpd/cert/21427950260000000.key
#设置站点访问规则
<Directory "/home/aaa/webroot">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#指定错误日志&访问日志
ErrorLog "logs/aaa.com-error_log"
CustomLog "logs/aaa.com-access_log" common
</VirtualHost>
其中要说明的是,在80虚拟机配置的最后一行,^(.*)? 和$1 这两东西代表了比如你访问了www.aaa.com/public/index/ ,那么这段url的/public/index/会被占位的$1变量都会照旧复制过来,[R=301,L]代表永久转发。
其实现在好多人都一窝蜂的都去用nginx了,抗高并发比apache牛,占用内存也少,可以考虑从apache+tomcat转向nginx+tomcat了,apache只是情怀。