HTTPS 现在是标配,但 Let’s Encrypt 证书只有 90 天有效期,手动续迟早会忘,忘了就是全站红框、接口失效。在雨云云服务器上用 acme.sh 配合 Let’s Encrypt,签发和续期都能自动化,再补一层到期监控,基本可以把它忘掉。下面是完整流程。
一、为什么要在雨云上自动管证书
雨云云服务器开机即用、公网 IP 固定,跑 acme.sh 很合适。自动续期省掉人工日历提醒,监控能兜住「续期脚本本身挂了」的极端情况。新购用优惠码 admin01 走专属入口 https://www.jiyueip.com/link/5617 五折拿服务器,多域名站点也能轻松起好几台。
二、安装 acme.sh
curl https://get.acme.sh | sh source ~/.bashrc acme.sh --version
装完会写一条 cron 到用户 crontab(默认每天检查续期),不用自己再配。证书默认存 ~/.acme.sh/。
三、签发证书
两种方式:
- HTTP 验证:需要 80 端口可访问,适合单域名。
acme.sh --issue -d example.com -w /var/www/html - DNS 验证:用 API 改解析记录,适合泛域名和不能开 80 端口的内网服务。
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
雨云域名解析如果在第三方(阿里云等),填对应的 DNS API 环境变量即可,acme.sh 支持几十家。
四、crontab 静默续期
acme.sh 安装时已自动写入类似:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
它只在距过期 30 天内才真正续,平时跑着无副作用。别手痒去改这条,删了就没人续了。
五、部署到 Nginx 并自动 reload
证书签发后,用 --install-cert 把它复制到 Nginx 目录并 reload:
acme.sh --install-cert -d example.com --key-file /etc/nginx/ssl/example.com.key --fullchain-file /etc/nginx/ssl/example.com.crt --reloadcmd "systemctl reload nginx"
这样每次续期成功会自动 reload Nginx,不中断连接。
六、加一层到期监控
续期脚本也可能自己挂(DNS API 失效、权限丢了)。加个监控兜底:
EXPIRE=$(echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
DAYS=$(( ( $(date -d "$EXPIRE" +%s) - $(date +%s) ) / 86400 ))
if [ "$DAYS" -lt 15 ]; then
echo "证书还剩 $DAYS 天" | mail -s "SSL 证书告警" admin@example.com
fi丢进 crontab 每天跑一次,小于 15 天就告警,给你留出排查时间。
七、多域名与泛域名
一台雨云服务器上多个站点,每个 -d 加一个域名即可,acme.sh 会把它们塞进同一张 SAN 证书。泛域名 *.example.com 必须用 DNS 验证,且要单独一条 -d example.com 把根域也包进去。
八、常见翻车点
- DNS 验证的 API 密钥过期,续期静默失败——监控能抓到;
- reloadcmd 写错,证书更新了 Nginx 还在用旧的;
- 把
~/.acme.sh里临时文件当正式证书用,路径错乱; - CDN 层也缓存了证书,源站换了 CDN 没换,用户看到旧的。
常见问题
关于在雨云服务器上自动管 SSL 证书的常见疑问,下面一并解答。






