本文使用 acme.sh + 自动续签 + Nginx reload
1.安装 acme.sh
curl https://get.acme.sh | sh
acme.sh 在申请证书时,默认使用 ZeroSSL 作为 CA(证书颁发机构),ZeroSSL 免费额度有限(通常每月 3 张 DV 证书免费),超过后需要付费
如果你想继续用 Let’s Encrypt(完全免费,无次数限制),需要手动指定:
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
2.确认验证目录目录
首先需要确认网站根目录,通常在nginx配置中的root标识行,如果没有设置过网站根目录,则是nginx默认的目录,可以检查以下目录是否是网站根目录
ls /usr/local/nginx/html
ls /etc/nginx/html
创建验证目录并赋予权限
mkdir -p /usr/local/nginx/html/.well-known/acme-challenge/
chmod -R 755 /usr/local/nginx/html/.well-known
3. 申请证书
假设你的网站是 example.com
,网站根目录是 /usr/local/nginx/html :
~/.acme.sh/acme.sh --issue -d example.com -w /usr/local/nginx/html
-
-d example.com
:域名 -
-w /var/www/html
:HTTP 验证路径,对应nginx
配置里root
的路径
如果你有 www.example.com
也要加上:
~/.acme.sh/acme.sh --issue -d example.com -d www.example.com -w /usr/local/nginx/html
4.安装证书到你指定路径
~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file /root/ssl_certs/example.com.key \
--fullchain-file /root/ssl_certs/example.com.pem \
--reloadcmd "systemctl reload nginx"
如果提示重启nginx失败,可以手动执行命令重启,如 systemctl restart nginx.service
5.检查自动更新
crontab -l
应该能看到类似:
0 0 * * * "~/.acme.sh"/acme.sh --cron --home "~/.acme.sh" > /dev/null
acme.sh 会每天检查一次证书是否快到期(30 天内),自动续签并执行 --reloadcmd
手动测试续签:
~/.acme.sh/acme.sh --renew -d example.com --force
注:以上方案由ChatGPT生成