首先感谢 Let’s encrypt 证书,部署十分简单、自动化并且免费。 本站基于 github 上的开源项目 acme.sh, 使用 Use Nginx mode 申请Let’s encrypt证书。通过脚本加入 crontab 定时计划自动更新。
curl https://get.acme.sh | shOr
wget -O - https://get.acme.sh | sh 其他更多安装方法参考 How to install
alias acme.sh=~/.acme.sh/acme.sh0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null选择使用 Use Nginx mode 来创建证书。 如下:
acme.sh --issue --nginx -d www.cxiang.net 这样在目录 /root/.acme.sh/www.cxiang.net/ 会生成证书。主要证书和私钥:
www.cxiang.net.cer
www.cxiang.net.keyserver{
listen 443 ssl http2;
server_name www.cxiang.net;
root /usr/wwwroot/cxiang;
index index.php index.html ;
ssl_certificate "/root/.acme.sh/www.cxiang.net/www.cxiang.net.cer";
ssl_certificate_key "/root/.acme.sh/www.cxiang.net/www.cxiang.net.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
可以通过 nginx 里面的 Rewrite 规则实现所有请求都走 https 访问 :
rewrite ^(.*)$ https://$host$1 permanent;创建 upssl.sh 脚本:
#!/bin/bash
/root/.acme.sh/acme.sh --renew --force --issue --nginx -d www.cxiang.net --reloadcmd "systemctl reload nginx" 脚本可执行权限:
chmod +x upssl.sh crontab任务:
0 3 15 * * root `/usr/local/upssl.ssh > /dev/null` 凌晨 3 点每半个月自动更新证书,reload nginx
使用DNS-API更加方便