欢迎观临
路漫漫其修远兮,吾将上下而求索

wordpress站升级HTTPS

现在越来越多的网站服务要求https,比如百度收录,微信小程序等等。今天抽空把博客升级了下,把过程记录下来,主要有这么几步:

  1. 准备ssl证书
  2. 设置证书自动续期
  3. 配置nginx或者apache支持https
  4. 更新wordpress配置和内链
  5. 重定向http到https
  6. 测试SSL支持

一、准备ssl证书

现在基本上都是用的Let’s Encrypt免费证书,虽然只有90天有效期,但是续期很方便。官方给出的工具之一是开源软件certbot,支持基于ssh的平台(mac,linux)。

1.1 下载certbot

git clone https://github.com/certbot/certbot

1.2 申请证书

cd certbot
# 命令格式如下,举个栗子
./letsencrypt-auto --nginx certonly -d www.chaoswork.cn -d chaoswork.cn

运行后会自动安装和升级依赖,并安装ssl证书。
需要注意一下几个问题:

  1. 该工具主要由python编写,通过pip包管理工具下载各种组件。pip默认源为国外地址,可能导致下载失败,所以最好切换为国内源。切换pip源
  2. 配置certonly,只下载安装证书,需要自己配置nginx或apache等http服务;如果不配置certonly,certbot会自动更新nginx配置ssl。
  3. 若不指定--nginx, certbot会提示用户选择nginx或者apache或其他http服务,并自动搜索配置文件;若报错找不到nginx或apache配置,则可以手动指定,对于nginx,指定的选项为:--nginx-server-root=/path/to/nginx/conf

运行完成后会生成四个证书文件:

/etc/letsencrypt/live/www.chaoswork.cn/fullchain.pem
/etc/letsencrypt/live/www.chaoswork.cn/privkey.pem
/etc/letsencrypt/live/www.chaoswork.cn/cert.pem
/etc/letsencrypt/live/www.chaoswork.cn/chain.pem

实际上,我们用两个证书文件就行了,一个是带私钥的文件,一个是带公钥的文件。

2. 设置证书自动续期

证书续期很简单,certbot自带功能。证书快到期后,到certbot源码目录下执行:

./certbot-auto renew --post-hook "systemctl reload nginx"

执行成功后证书就自动更新了, 并且会自动更新nginx配置并重启nginx。

要设置自动更新,可以利用linux中的cron服务。cron是linux自带的定时任务程序。对于certbot,配置cron job,每两个月的第一天执行证书续期任务:

#minute hour day month day_of_week    command
    0     0    1   */2      *          /letsencrypt/certbot-auto renew --post-hook "systemctl reload nginx"

【注意】: cron job里面需要用绝对路径。

3. 配置nginx或者apache支持https

直接以一个例子来说明,可以将其中ssl部分拷贝过去,并更改证书路径就可以了。

server {
        listen 80 default; #默认监听80的HTTP端口; 
        listen 443 ssl;    #确保Nginx监听HTTPS的443端口

        # SSL证书配置
        ssl_certificate     /etc/letsencrypt/live/www.chaoswork.cn/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.chaoswork.cn/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        root /alidata/www/myblog;
        index index.html index.htm;

        server_name chaoswork.cn www.chaoswork.cn;
}

【注意】:为了安全性,只使用TLS协议,包括TLSv1.0,TLSv1.1,TLSv1.2,禁止 SSL 协议。

配置后重启nginx,wordpress应该就可以同时通过https和http访问了,但是还有些工作要做。

4. 更新wordpress配置和内链

4.1 修改wordpress后台配置中的地址改为https版本。

wordpress后台配置https
通过上面的设置,绝大部分导航中的链接就由wordpress系统自动改为HTTPS版本。对于正文中的内部链接还需要手工修改。

4.2 修改内链地址。一般有两种方法:

  • 直接更新数据库。
update wp_posts set post_content = replace(post_content, "http://www.chaoswork.cn/","https://www.chaoswork.cn/")
  • 利用wordpress提供的api来重写链接。在使用的主题(themes)的目录下的 function.php加入如下代码:
//转换http为https
function change_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;
}
function change_ssl(){
    if(is_ssl()){
        ob_start("change_ssl_main");
    }
}
add_filter("get_header", "change_ssl");

修改完了,可以在检查下源码如php,html,js,css等文件中,是否还有本站的http连接,再修改过来。

5. 重定向http到https

一切都修改完了,http就可以永久重定向到https了。nginx重定向有多种写法,举例如下:

  1. 使用rewrite指令:
# rewrite写法
if ($scheme = http ) {
    rewrite ^(.*)$ https://$host$1 permanent;
}
  1. 使用return指令:
# rewrite写法
if ($scheme = http ) {
    return 301 https://$host$request_uri;
}

对于重定向,推荐用return写法,性能比rewrite更优。

6. 测试SSL支持

证书配置好了,我们可以利用一些第三方网站测试下自己网站的SSL支持情况。一个比较好的网站是:
SSL Server Test
支持程度达到B以上就可以了。

赞(2) 打赏
未经允许不得转载:云海鹰影博客 » wordpress站升级HTTPS
分享到: 更多 (0)

欢迎留言 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏