本文基于 Certbot 官方工具编写,适配 CentOS 7+/Ubuntu 20.04+ 主流 Linux 发行版,与前文 Nginx 配置完全兼容,覆盖免费 HTTPS 证书一键申请、自动配置、永久自动续期全流程,支持单域名、多域名、泛域名证书,所有命令均经过生产环境验证,可直接复制执行,零门槛实现全站 HTTPS 加密,内容精简聚焦核心需求,无冗余操作,适配网站阅读场景。


一、申请前必备条件

  1. 域名已完成解析,A 记录指向服务器公网 IP
  2. 服务器防火墙已放行 80(HTTP)、443(HTTPS)端口
  3. 已完成 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

执行后按提示完成以下操作即可:

  1. 输入联系邮箱(用于证书到期提醒、安全通知)
  2. 同意用户协议
  3. 输入需要签发证书的域名(多个域名用空格分隔)
  4. 选择是否开启 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;
}

六、高频踩坑避坑指南

  1. 域名验证失败,证书申请报错解决方案:① 确认域名 A 记录已正确解析到当前服务器公网 IP;② 防火墙已放行 80 端口,无 CDN、云防护拦截验证请求;③ 站点根目录权限正确,Nginx 有读取权限。
  2. 泛域名证书自动续期失败解决方案:手动 DNS 验证的泛域名证书,无法自动续期,需安装对应域名服务商的 DNS 插件(阿里云 / 腾讯云 / Cloudflare 均有官方插件),实现自动 DNS 验证与续期。
  3. 证书续期后,HTTPS 不生效解决方案:证书续期后必须重载 Nginx 配置才能生效,在续期命令后追加&& systemctl reload nginx,自动完成配置重载。
  4. 触发证书申请频率限制解决方案: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

下载文件文章显示网盘30天,自己及时保存,具体规则详见: 查看常见问题说明? 单下载文件不包含安装或技术指导,下载之前认真看完常见问题说明! 遇到网盘链接失效无法下载,联系站长处理! 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!如果无意侵犯了您的权益请与我们联系,我们将在24小时内删除!