Nginx SSL 证书自动续期 Let-s Encrypt
HTTPS 是标配,证书用 Let's Encrypt,免费、自动续期、不花钱。
为什么 Let's Encrypt
- 免费 — 不花一分钱
- 自动 — 配好之后不用管
- 安全 — 90 天一换,防泄露
- 广泛 — 浏览器都认
安装 Certbot
# Ubuntu
apt update
apt install certbot python3-certbot-nginx
验证
certbot --version
申请证书
方式一:Nginx 插件(推荐)
certbot --nginx -d soulwrite.xyz -d www.soulwrite.xyz
按提示输入邮箱、同意条款,证书自动放到 /etc/letsencrypt/live/soulwrite.xyz/。
方式二:Standalone
不启动 Web 服务器时用:
certbot certonly --standalone -d soulwrite.xyz
自动续期
Let's Encrypt 证书 90 天过期,Certbot 自动配好定时任务:
# 检查自动续期
certbot renew --dry-run
手动续期
certbot renew
续期成功后重载 Nginx:
systemctl reload nginx
配合 Docker Nginx
我用的是 OpenResty 跑在 Docker 里。证书需要映射出来:
volumes:
- ./ssl:/etc/nginx/ssl
证书生成后复制过去:
cp /etc/letsencrypt/live/soulwrite.xyz/fullchain.pem ./ssl/
cp /etc/letsencrypt/live/soulwrite.xyz/privatekey.pem ./ssl/
多个域名
一个证书可以包含多个域名:
certbot --nginx -d soulwrite.xyz -d blog.soulwrite.xyz -d api.soulwrite.xyz
通配符域名要 DNS 验证,稍微复杂点。
OCSP 装订
加速 SSL 握手:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
踩坑记录
坑 1:验证失败
80 端口被占用。停掉占用进程或用 DNS 验证:
certbot certonly --manual --preferred-challenges dns -d soulwrite.xyz
坑 2:续期后 Nginx 没重载
手动检查续期日志:
cat /var/log/letsencrypt/renew.log
确保续期脚本里有 systemctl reload nginx。
坑 3:容器内证书过期
Docker 容器内的 Nginx 看不到宿主机的证书变化。解决方案:定期重启容器或挂载 /etc/letsencrypt 目录。
我的配置
/etc/letsencrypt/
├── live/
│ └── soulwrite.xyz/
│ ├── fullchain.pem
│ ├── privatekey.pem
│ └── chain.pem
└── renewal/
└── soulwrite.xyz.conf
总结
Let's Encrypt 是中小站点的最佳选择:
- 免费:不花钱
- 自动:配好不用管
- 安全:90 天换发
- 简单:一条命令搞定
唯一要注意的是 Docker 容器要映射证书目录,或者定期重启刷新。
Nginx/OpenResty SSL证书自动续期LetsEncrypt
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法