本文基于 Certbot 官方工具编写,适配 CentOS 7+/Ubuntu 20.04+ 主流 Linux 发行版,与前文 Nginx 配置完全兼容,覆盖免费 HTTPS 证书一键申请、自动配置、永久自动续期全流程,支持单域名、多域名、泛域名证书,所有命令均经过生产环境验证,可直接复制执行,零门槛实现全站 HTTPS 加密,内容精简聚焦核心需求,无冗余操作,适配网站阅读场景。
一、申请前必备条件
- 域名已完成解析,A 记录指向服务器公网 IP
- 服务器防火墙已放行 80(HTTP)、443(HTTPS)端口
- 已完成 Nginx 服务安装部署(与前文 LNMP 环境完全兼容)
二、Certbot 官方工具一键安装
Certbot 是 Let’s Encrypt 官方推荐的证书申请管理工具,自动完成域名验证、证书签发、配置更新全流程,直接复制对应系统命令执行即可。
CentOS/RHEL/ 阿里云 Linux 系统
# 1. 安装EPEL依赖源
yum install -y epel-release yum-utils
# 2. 一键安装Certbot核心工具与Nginx适配插件
yum install -y certbot python3-certbot-nginx
# 3. 验证安装是否成功
certbot --version
Ubuntu/Debian 系统
# 1. 更新软件源并一键安装Certbot全组件
apt update && apt install -y certbot python3-certbot-nginx
# 2. 验证安装是否成功
certbot --version
三、证书申请核心方式(2 种可选)
方式 1:一键自动申请 + Nginx 自动配置(新手推荐)
全程交互式操作,无需手动修改 Nginx 配置,自动完成证书签发、HTTPS 配置、HTTP 跳转 HTTPS,零门槛落地。
# 一键执行证书申请与自动配置
certbot --nginx
执行后按提示完成以下操作即可:
- 输入联系邮箱(用于证书到期提醒、安全通知)
- 同意用户协议
- 输入需要签发证书的域名(多个域名用空格分隔)
- 选择是否开启 HTTP 强制跳转 HTTPS(推荐开启)执行完成后,证书自动生效,Nginx 配置自动更新,直接访问域名即可看到 HTTPS 加密标识。
方式 2:手动申请证书(自定义配置 / 泛域名推荐)
适合需要自定义证书路径、泛域名证书、多站点统一管理的场景,不修改现有 Nginx 配置。
单 / 多域名证书申请(Webroot 验证)
# 替换域名与站点根目录,多个域名用 -d 追加
certbot certonly --webroot -w /usr/share/nginx/html -d example.com -d www.example.com
-w:指定站点根目录,用于域名所有权验证-d:指定需要签发证书的域名,支持多个域名共用一张证书
泛域名证书申请(DNS 验证)
支持*.example.com泛域名,覆盖所有二级子域名,需通过域名 DNS TXT 记录完成所有权验证。
# 替换为你的根域名,同时包含根域名与泛域名
certbot certonly --manual --preferred-challenges dns -d example.com -d *.example.com
执行后按提示,在域名解析后台添加指定的 TXT 记录,验证通过后即可完成证书签发。
四、证书自动续期配置(永久免费核心)
Let’s Encrypt 证书有效期为 90 天,Certbot 安装后默认自动配置系统定时任务,无需手动干预,先执行以下命令测试续期是否正常:
# 模拟证书续期,无报错即为自动续期配置正常
certbot renew --dry-run
手动添加续期定时任务(兜底方案)
若默认自动续期失效,可手动添加定时任务,实现永久自动续期,续期成功后自动重载 Nginx 生效:
bash
运行
# 编辑系统定时任务
crontab -e
# 添加以下内容,每月1号凌晨2点执行续期操作
0 2 1 * * /usr/bin/certbot renew --quiet && systemctl reload nginx
五、证书核心路径与 Nginx 配置适配
证书固定存储路径
所有签发的证书统一存储在/etc/letsencrypt/live/你的域名/目录下,核心文件如下:
- 证书完整公钥(Nginx 配置必用):
fullchain.pem - 证书私钥(Nginx 配置必用):
privkey.pem
Nginx 配置适配示例
与前文 Nginx HTTPS 配置完全兼容,直接替换证书路径即可使用:
nginx
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# 直接填写Certbot生成的证书路径
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其余SSL安全配置、反向代理、PHP解析配置与前文完全一致
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
六、高频踩坑避坑指南
- 域名验证失败,证书申请报错解决方案:① 确认域名 A 记录已正确解析到当前服务器公网 IP;② 防火墙已放行 80 端口,无 CDN、云防护拦截验证请求;③ 站点根目录权限正确,Nginx 有读取权限。
- 泛域名证书自动续期失败解决方案:手动 DNS 验证的泛域名证书,无法自动续期,需安装对应域名服务商的 DNS 插件(阿里云 / 腾讯云 / Cloudflare 均有官方插件),实现自动 DNS 验证与续期。
- 证书续期后,HTTPS 不生效解决方案:证书续期后必须重载 Nginx 配置才能生效,在续期命令后追加
&& systemctl reload nginx,自动完成配置重载。 - 触发证书申请频率限制解决方案:Let’s Encrypt 单域名每周最多签发 5 次重复证书,测试时务必使用
--dry-run参数模拟执行,避免触发频率限制。
七、核心运维命令
# 查看服务器上已签发的所有证书详情
certbot certificates
# 手动触发所有证书续期
certbot renew
# 吊销指定域名的证书
certbot revoke --cert-path /etc/letsencrypt/live/example.com/fullchain.pem
# 删除指定域名的证书与配置
certbot delete --cert-name example.com

