本文针对火山引擎云服务器(支持CentOS、Ubuntu、Debian主流系统),详细讲解使用 acme.sh 脚本快速申请、安装 Let's Encrypt 免费SSL证书的完整流程,包括证书自动续期、Nginx配置生效,全程无需手动操作复杂步骤,适合新手快速上手实现网站HTTPS加密访问。
acme.sh 是一款开源的SSL证书申请工具,无需依赖复杂的系统环境,一键安装即可使用,支持多种验证方式和自动续期。
登录火山引擎云服务器(SSH工具:Xshell、FinalShell、Putty等),执行以下命令一键安装(兼容所有主流Linux系统):
# 一键安装 acme.sh(官方推荐命令,自动拉取最新版本) curl https://get.acme.sh | sh -s email=your@email.com
说明:
your@email.com 替换为你的真实邮箱(用于接收证书到期提醒、异常通知,无需验证,仅作通知用途)# 重新加载环境变量(立即生效,无需重新登录) source ~/.bashrc
执行以下命令,若输出acme.sh版本信息,则说明安装成功:
# 查看 acme.sh 版本 acme.sh --version
成功输出示例:acme.sh v3.0.7(版本号会随官方更新变化,无需追求最新,稳定即可)。
采用 HTTP-01 验证方式(最简便,无需配置DNS,适合已有Web服务器的场景),申请证书前确保80端口开放,且域名已解析到服务器公网IP。
执行以下命令,替换你的域名(支持单域名、多域名、泛域名,此处以单域名为示例):
# 申请单域名SSL证书(替换为你的域名,如 www.example.com 或 example.com) acme.sh --issue -d yourdomain.com -d www.yourdomain.com --webroot /usr/share/nginx/html/
-d yourdomain.com:需要绑定SSL证书的主域名(必填,可多个,用 -d 分隔)-d www.yourdomain.com:可选,绑定二级域名(如需支持www前缀,添加此参数)--webroot:Web根目录路径(对应你的Nginx网站根目录,acme.sh 会在该目录下创建验证文件)/usr/share/nginx/html/(CentOS/Ubuntu通用)--standalone 参数(acme.sh 会临时启动一个80端口的服务完成验证),命令如下:acme.sh --issue -d yourdomain.com --standalone
执行命令后,若输出 Verify finished, start to sign 和 Cert success,则说明证书申请成功。
证书默认存储路径(无需手动修改,acme.sh 会管理):~/.acme.sh/yourdomain.com/(包含证书文件、私钥文件)。
ping yourdomain.com 验证);2. 80端口被占用或未开放(可通过 netstat -tulpn | grep 80 查看端口状态);3. Web根目录路径错误(确认Nginx配置文件中的根目录)。
证书申请成功后,需将证书安装到Nginx的指定目录,并配置SSL相关参数,才能实现HTTPS访问。
# 安装SSL证书到Nginx专用目录(自动创建目录,避免误删) acme.sh --install-cert -d yourdomain.com \ --key-file /etc/nginx/ssl/yourdomain.com.key \ --fullchain-file /etc/nginx/ssl/yourdomain.com.crt \ --reloadcmd "systemctl reload nginx"
--key-file:私钥文件存储路径(自定义,建议放在 /etc/nginx/ssl/ 目录下)--fullchain-file:完整证书文件存储路径(包含证书链,Nginx 推荐使用 fullchain 文件)--reloadcmd:证书安装/续期后,自动重载Nginx配置(无需手动执行 systemctl reload nginx)编辑Nginx站点配置文件(以默认配置文件为例,若有自定义站点配置,修改对应文件即可):
# 编辑 Nginx 配置文件 vim /etc/nginx/nginx.conf
在 server 块中添加以下SSL配置(替换为你的域名和证书路径):
server {
listen 443 ssl http2; # 监听443端口,启用SSL和http2
server_name yourdomain.com www.yourdomain.com; # 绑定的域名
# SSL证书配置(对应上面安装的证书路径)
ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
# SSL优化配置(可选,提升安全性和性能)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 网站根目录(与申请证书时的webroot保持一致)
root /usr/share/nginx/html;
index index.html index.php;
# 其他配置(日志、跳转等)...
}
# 可选:配置 HTTP 自动跳转 HTTPS(80端口重定向到443端口)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# 永久重定向到 HTTPS
return 301 https://$host$request_uri;
}
# 验证 Nginx 配置是否有语法错误 nginx -t # 若输出 "test is successful",重载 Nginx 配置 systemctl reload nginx
完成以上配置后,通过浏览器访问你的域名(https://yourdomain.com),若出现以下现象,则说明SSL证书配置成功:
http://yourdomain.com 可自动跳转到 https://yourdomain.com(若配置了跳转)acme.sh 安装时已自动创建定时任务(crontab),每日检查证书状态,到期前自动续期并重载Web服务器配置,无需手动操作。
# 查看 acme.sh 定时任务 crontab -l
成功输出示例:0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null(每日凌晨0点执行检查)。
# 手动测试证书续期(不会实际续期,仅验证流程是否正常) acme.sh --renew -d yourdomain.com --dry-run
若输出 Skip, Next renewal time is,则说明续期功能正常,证书会在到期前自动续期。
acme.sh --renew -d yourdomain.com 手动续期nginx -t/httpd -t),修复后重新重载source ~/.bashrc),或使用完整路径执行(~/.acme.sh/acme.sh)