WordPress网站配置Https
对于常规Http站点,由于使用明文传输,一方面网络通信存在被侦听的风险,另一方面国内ISP劫持较为严重,可能出现强加广告等问题。
使用Https是可以解决上面两个问题,但是服务端Https证书最好是主流CA进行颁发的,虽然也可以自己颁发Https证书,但是浏览器访问时会提示用户存在安全风险。
目前免费的证书提供商有startssl和let’s encrypt,这次我们使用let’s encrypt给网站进行加密。
下载脚本
使用第三方的脚本可以更方便的配置openssl和生成crt证书。
1 2 3 |
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh chmod +x letsencrypt.sh |
配置脚本
然后需要配置下使用letsencrypt的域名,修改letsencrypt.conf文件。
其中DOMAIN_KEY
改成域名.key
,DOMANI_DIR
是网站的路径。其余的相应也改下。
1 2 3 4 5 6 7 |
# only modify the values, key files will be generated automaticly. ACCOUNT_KEY="letsencrypt-account.key" DOMAIN_KEY="kswapd.cn.key" DOMAIN_DIR="/home/www/default" DOMAINS="DNS:kswapd.cn,DNS:www.kswapd.cn" #ECC=TRUE #LIGHTTPD=TRUE |
执行脚本
1 |
./letsencrypt.sh ./letsencrypt.conf |
结果如下,说明配置正确。
1 2 3 4 5 6 7 |
Verifying kswapd.cn... kswapd.cn verified! Verifying www.kswapd.cn... www.kswapd.cn verified! Signing certificate... Certificate signed! New cert: kswapd.chained.crt has been generated |
然后在当前执行脚本的目录会生成下面的文件。
主要是一些crt证书和key文件,下面修改nginx配置会用到这些文件。

nginx 配置
上面的脚本执行正确才能配置nginx,否则无效的证书会导致nginx无法正常运行。
其中rewrite ^(.*)$ https://$host$1 permanent;
是强制全站使用HTTPS的意思,如果仍然有HTTP请求,那么会301要求浏览器跳转到HTTPS相关的路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# Http的配置 server{ listen 80 default_server; #listen [::]:80 default_server ipv6only=on; server_name _; index index.html index.htm index.php; root /home/www/default; # 使用Https rewrite ^(.*)$ https://$host$1 permanent; } # https的配置 server{ # Https nginx alias listen 443 ssl; ssl_certificate 路径.域名.chained.crt; ssl_certificate_key 路径.域名.key; server_name _; index index.html index.htm index.php; root /home/wwwroot/default; #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; # 省略一些配置 location ~ /.well-known { allow all; } location ~ /\. { deny all; } # wordpress配置 location / { expires 1d; 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; } } access_log /home/wwwlogs/access.log; # Https配置 location /.well-known/ { alias /root/lets_encrypt/.well-known/; } # Https配置结束 } |
测试nginx的配置
1 |
nginx -t |
测试没有问题后,重启nginx
1 |
nginx -s reload |
证书自动续签
letsencrypt的Https证书只有90天,但是我们可以无限续签,这里使用crontab创建一个定时任务,定期去请求最新的证书,防止证书过期。
创建一个文件auto_renew
并写入下面的内容。
1 2 |
# 每月一日续签证书 0 0 1 * * /root/lets_encrypt/letsencrypt.sh /root/lets_encrypt/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1 |
将任务提交到crontab。
1 2 3 4 |
# 提交任务 crontab auto_renew # 查看crontab中的任务 crontab -l |
配置WordPress
最后记得配置WordPress使用Https协议,否则可能存在发不了文章的问题。
