WordPress在Nginx下启用Https
By: Date: 2017年6月28日 Categories: 程序 标签:,

随着HTTPS的不断的普及,我在HTTP下的折腾也越来越无法得到满足,看着别人家的网站都有绿锁,就总觉得自己的会不安全。强迫症驱使,也决定在网站上把绿锁给弄出来。研究了几个免费的SSL证书,发现阿里就有提供Symantec颁发的个人免费证书,有效期一年,因此决定就用它玩玩儿。

申请阿里SSL证书

  1. 阿里提供的Symantec免费DV证书,在产品页找CA证书服务,或者云盾证书服务。在购买页我们选择免费型DV SSL
    阿里云DV SSL
  2. 购买之后,我们进入控制台,找到安全(云盾)-证书服务,补全SSL证书信息,提交审核。
    流程:补全信息 - 提交审核 - 查看进度 - 颁发证书 - 下载证书
    详细的补全信息,审核流程可以看参考资料1
  3. 当申请审核通过后会颁发证书,可以在下载页面中下载,并且下载页面也已经提供了不同服务器证书安装方法,其实照着操作即可。
    下图是阿里提供的Nginx下的SSL配置:
    阿里云DV SSL在Nginx上的配置

设置SSL

  1. 我们在Nginx的conf文件目录中新建cert文件夹,将我们下载的证书上传到该文件夹中。
  2. 修改conf中的nginx.conf文件,修改80端口的server为如下:
server {
        listen       80;
        server_name  www.****.com ****.com;
        rewrite ^(.*) https://$server_name$1 permanent;
}

这里是将80端口的请求重定向到https上。
3. 修改443端口的server:

server {
        listen 443;
        server_name www.**********.com **********.com;
        ssl on;
        root html;
        index index.html index.htm index.php;
        ssl_certificate   cert/**********.pem;
        ssl_certificate_key  cert/**********.key;
        ssl_session_timeout 5m;
        ssl_ciphers **********
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
            root D:/Web/**********;
            index index.html index.htm index.php;
 
            # config for wordpress begin
            if (-f $request_filename/index.html){
                rewrite (.*) $1/index.html break;
            }
            if (-f $request_filename/index.php){
                rewrite (.*) $1/index.php;
            }
            if (!-f $request_filename){
                rewrite (.*) /index.php;
            }
            # config for wordpress end
 
        }
        location ~ \.php$ {
            root           D:/Web/**********;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

其中的location \ 是增加了对wordpress中的固定链接的配置(参考资料2)。注意将上述配置的******根据实际情况替换。
重新启动Nginx服务。

修改站点地址及内链地址

  1. 修改wordpress设置中的wordpress地址及站点地址为https://********。
  2. 在我们主题的模板中,找到function.php中,尾部增加如下代码:
//WordPress SSL at 2016/12/29 update
add_filter('get_header', 'fanly_ssl');
function fanly_ssl(){
    if( is_ssl() ){
        function fanly_ssl_main ($content){
            $siteurl = get_option('siteurl');
            $upload_dir = wp_upload_dir();
            $content = str_replace( 'http:'.strstr($siteurl, '//'), 'https:'.strstr($siteurl, '//'), $content);
            $content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), 'https:'.strstr($upload_dir['baseurl'], '//'), $content);
            return $content;
        }
        ob_start("fanly_ssl_main");
    }
}

目的是将我们内链的图片等地址的http用https代替。

好了,到这里我们就已经将wordpress整站改成了https,当然如果外链了其他的网址,页面还是会显示不安全,所以需要挨个排查。

现在可以开心的打开我们的网站了。

参考资料

  1. 在阿里云申请Symantec免费SSL证书操作流程
  2. wordpress配置固定链接nginx访问404问题解决方法
  3. WordPress整站开启HTTPS协议,让站内链接支持SSL证书

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注