首先感谢 Let’s encrypt 证书,部署十分简单、自动化并且免费。 本站基于 github 上的开源项目 acme.sh, 使用 Use Nginx mode
申请Let’s encrypt证书。通过脚本加入 crontab
定时计划自动更新。
curl https://get.acme.sh | sh
Or
wget -O - https://get.acme.sh | sh
其他更多安装方法参考 How to install
alias acme.sh=~/.acme.sh/acme.sh
0 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.key
server{
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更加方便