Apache 强制全站https请求(配置ssl证书)

环境:Apache2.2 + Centos 6.8 
最近做网站需要用到https,像百度、京东那样,浏览器上有个绿色的小锁头,同时数据加密也是网站很大的保障。由于是临时测试的,所以在阿里云上面买了个赛门铁克的免费型的证书。(中间申请部分略过)证书最后颁发的时候,可以在列表页操作下载,进入下载页,选择Apache,然后可以按照上面的官方的文档配置,但是不需要这么做,刚开始弄这个的人,估计度娘谷歌了很久还是懵逼,因为最后在地址栏输入域名刷新的时候,却不是自己想要的效果。要这么来,保准你次次都行。

咋们先要这么想:比如我手上有个一个域名www.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只是情怀。

留下评论