wordpress启用全站加密

最近切换到vultr的洛杉矶机房,放弃了之前的cloudflare加速,启用Let’s Encrypt加密。
Let’s Encrypt证书的获取和更新见这里,完整文档见这里

先讲获取和更新证书。具体的命令见官方文档。我这里只讲官方没讲清楚或需要注意的地方。
1、安装certbot。
2、获取证书。因为是nginx代理,必须webroot插件。webroot使得获取和更新证书无须停掉web服务。使用webroot需要指定一个目录存放webroot的临时文件,且nginx需要配置一个模式为.well-known/acme-challenge的location指定到该目录。
3、保持更新

再配置wordpress和nginx
1、修改wordpress常规配置中的两个地址到https。这点,直接修改数据库也可以做到。
2、启用后台加密。修改wp-config.php文件,添加define(‘FORCE_SSL_ADMIN’, true);定义。
3、最后是最关键的,配置nginx,将http重定向到https,将https转发到wordpress。

下面是我的配置:

server {
     listen         80;
     server_name    blog.wencan.org;
     return         301 https://$server_name$request_uri;
}

server {
    listen       443 ssl;
    server_name  blog.wencan.org;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/blog.wencan.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.wencan.org/privkey.pem;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
	proxy_pass http://127.0.0.1:81/;
        proxy_redirect      off;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header    X-Forwarded-Proto $scheme;
    }

    location /.well-known/acme-challenge {
        root /etc/nginx/webroot;
    }
}

关键是X-Forwarded-Proto头的配置。该location的其它内容都算是标配,http代理的标配。但这里得配置X-Forwarded-Proto头,告诉wordpress,前端是https代理!否则,网页很多链接,依然是顽固的http链接。

为blog配置CloudFlare CDN加速,并为OpenWrt配置ddns

一、配置wordpress域名
在wordpress后台配置两个域名均为https
这里的前提是blog本身已经支持https,不支持https的情况我没法尝试。推荐Redhat的Openshift

二、配置CloudFlare
1、注册CloudFlare
2、添加根域名
3、确认域名解析信息
4、修改域名的NS服务器到CloudFlare指定的NS服务器
等待DNS服务器修改生效

三、http自动转向https
在CloudFlare后台Page Relues添加规则:
匹配模式为http://domain/*
规则为Always use https

四、下载证书
1、ssh连接OpenWrt路由器
2、opkg install curl
3、mkdir -p /etc/ssl/certs
4、curl http://secure.globalsign.net/cacert/Root-R1.crt -o /etc/ssl/certs/GlobalSign_Root_R1.pem
5、从其它linux系统复制 /etc/ssl/certs/ca-certificates.crt到/etc/ssl/certs目录,作为根证书

五、配置OpenWrt的ddns
1、安装ddns-scripts、ddns-scripts_cloudflare、luci-app-ddns
2、刷新页面,进入Service-Daynamic DNS,删掉myddns_ipv6,编辑myddns_ipv4
3、勾选Enable、IPv4-Address,DDns Service provider选CloudFlare,Hostname/Domain填完全的域名(子域名),Username填注册邮箱地址,Password可以为真实的密码或CloudFlare API token(推荐API Token。API Token可以在My account找到),勾选Use HTTP Secure,下面的Path to CA-Certificate填上面的证书路径:/etc/ssl/certs/GlobalSign_Root_R1.pem

最后配置OpenWrt的ddns是个大麻烦。CloudFlare的api要求使用https,但OpenWrt默认使用http,浏览了这里的讨论,多次尝试,最终发现下载GlobalSign_Root_R1.pem证书后,Use HTTP Secure和Path to CA-Certificate才可见。

如果blog不需要https,一、三步不需要。

参考:
https://dev.openwrt.org/ticket/12500
https://api.cloudflare.com/