文档中心

2026新版CentOS/Rocky/Alma Linux服务器Nginx配置Let's Encrypt免费SSL证书教程(自动续期+HTTPS强制跳转)

发布时间:2026-05-18 10:28:35     更新时间:2026-05-18 10:31:16

一、教程说明

采用 Let's Encrypt 免费SSL证书,证书有效期90天,支持自动免费续期(按 Let's Encrypt 现行政策)。分为自动模式(Nginx插件自动配置)和手动模式(仅获取证书,不改动网站配置)。所有example.com为占位符,必须替换为真实域名。

适用系统: CentOS/Rocky/Alma Linux

前置条件

       域名已成功解析到服务器公网IP

       服务器防火墙/安全组放行 80443 端口

       Nginx 服务正常运行,网站可正常访问

自动VS手动 总结对照表

方式

优点

缺点

适用场景

自动申请

一键部署、自动写配置、自动跳转、零门槛

会自动修改Nginx配置,复杂站点易冲突

新手、简单单站点、快速上线、标准环境

手动申请

完全可控、不改配置、支持通配符、适配端口被封场景

需要自己写虚拟主机配置,操作繁琐

生产环境、复杂多站点、80端口占用、通配符证书、严谨运维

 

二、环境准备(带命令注释)

1、防火墙放行端口

# 防火墙放行80443端口,如果使用云主机在云平台也需要放行

 

bash
sudo firewall-cmd --permanent --add-service=http      # 放行HTTP验证端口,证书申请必须
sudo firewall-cmd --permanent --add-service=https    #
放行HTTPS加密访问端口
sudo firewall-cmd --reload   #
重新加载 firewalld 防火墙配置
sudo firewall-cmd --list-all  #
检查防火墙状态

2、SELinux 状态检查与处理

CentOS / Rocky / Alma Linux 默认开启 SELinux,会阻止 Certbot 操作 Nginx 与证书文件,导致 HTTPS 无法启动。

bash                                                                                                                                            

# 查看当前 SELinux 状态,Enforcing=开启  Permissive=仅警告  Disabled=关闭

sudo getenforce
#
仅当状态为 Enforcing 时执行下面的操作,否则跳过

# 方案 1:临时关闭(重启失效,用于快速测试)
sudo setenforce 0

# 方案 2:保留 SELinux 并正确放行(安全,官方推荐)
sudo chcon -Rt httpd_sys_content_t /etc/letsencrypt/   #
给证书目录添加 Nginx 访问权限
sudo restorecon -Rv /etc/nginx/              #
恢复 Nginx 配置文件上下文
sudo restorecon -Rv /usr/share/nginx/html/    #
恢复网站根目录上下文
sudo restorecon -Rv /etc/letsencrypt/         #
恢复 SSL 证书目录上下文
sudo setsebool -P httpd_can_network_connect 1 #
允许 Nginx 网络连接(OCSP 需要)

# 方案 3:永久关闭(简单省事,但不推荐生产环境)
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sudo reboot

3、安装证书工具 Certbot

二选一安装方式,推荐 DNF 简单版

方式 1dnf 安装(推荐小白)

Bash
sudo dnf update -y         #升级系统

sudo dnf install -y epel-release    # 安装 EPEL 源(必须)
# certbot
:证书核心工具  python3-certbot-nginxnginx自动适配插件
sudo dnf install -y certbot python3-certbot-nginx

方式 2Snap 安装(版本更新)

bash

sudo dnf install -y snapd   # 安装 snapd 软件包管理器
sudo systemctl enable --now snapd.socket  # 启用并启动 snapd 套接字

# 【新增】安装 snap 核心组件
sudo snap install core
sudo snap refresh core

sudo snap install --classic certbot   # 安装 certbot 证书申请工具

# 创建软链接,让系统能全局识别 certbot 命令
sudo ln -sf /snap/bin/certbot /usr/bin/certbot

# 【优化】创建系统软链接,使 snap 命令全局生效(兼容最小化系统)

sudo ln -s /var/lib/snapd/snap /snap 2>/dev/null || true

sudo systemctl status snapd.socket --no-pager  # 【新增】检查 snapd 状态

验证安装:

bash                                                       
certbot --version

 

三、自动申请SSL证书(Certbot自动配置)

自动模式会修改 /etc/nginx/ 下的虚拟主机配置,强烈建议在执行前备份,这是运维基本规范。

Bash                                                                                                                   
#
备份配置(根据实际文件名修改)
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

1、核心命令

bash
# 自动申请证书、自动修改Nginx配置、自动配置http强制跳转https
# -d
绑定域名,可绑定多个域名,example.com换成自己的域名
sudo certbot --nginx -d example.com -d www.example.com

2、交互步骤说明

       输入邮箱:用于证书到期告警

       Y:同意用户协议

       选择 Redirect/重定向选项:开启永久跳转2(所有http自动跳转https

注:Certbot 新版本交互流程可能有调整,建议注明"根据提示操作即可"

3、自动模式适用场景

       新手用户、不想手动修改配置文件

       自动修改 Nginx 配置、开启 HTTPS

       自动设置 80 端口 301 跳转 HTTPS

四、手动申请SSL证书(仅获取证书,不修改网站配置)

手动模式只生成证书文件,不会改动任何Nginx配置,所有配置需要自己写,所有example.com必须替换为真实域名。

1HTTP验证(80端口正常可用、推荐)

bash                                                                                                                             
# certonly:仅获取证书,不配置网站
sudo certbot certonly --webroot -w /usr/share/nginx/html -d
example.com -d www.example.com

2DNS 验证(适用于 80 端口被占用 / 封禁场景;本教程不含 DNS 插件安装教程,纯手动 DNS 证书无法自动续期)

bash
# 手动DNS验证 TXT 记录,支持通配符域名 *.example.com
#
执行后会提示你在域名解析商处添加 TXT 记录,按提示操作即可
sudo certbot certonly --manual --preferred-challenges=dns -d *.example.com -d example.com

DNS 验证操作步骤:

  1. 执行上述命令后,终端会显示类似 _acme-challenge.example.com TXT 记录名称和记录值
  2. 登录你的域名解析商(如阿里云、腾讯云、Cloudflare 等)控制台
  3. 添加一条 TXT 记录:主机记录填 _acme-challenge,记录值填终端提供的字符串
  4. 等待 DNS 生效(通常 1-5 分钟,部分服务商可能需要 10 分钟)
  5. 按回车继续,Certbot 会自动验证 DNS 记录
  6. 验证通过后,证书会生成在 /etc/letsencrypt/live/ 目录下

⚠️ 注意:申请通配符证书 *.example.com时,通常需要同时添加 -d example.com(根域名),否则根域名无法使用该证书。

3手动编辑 Nginx 配置

证书统一存放路径:/etc/letsencrypt/live/你的域名/

bash                                                                                         
sudo nano /etc/nginx/conf.d/你的域名.conf

 

nginx
# 80 端口强制跳转 HTTPS

server {                                                  

    listen 80;

    listen [::]:80;

    server_name example.com www.example.com;

    return 301 https://$host$request_uri;

}

 

# 443 SSL 配置

server {

    listen 443 ssl http2;

    listen [::]:443 ssl http2;

    server_name example.com www.example.com;

 

    # 证书路径

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

 

    # SSL 安全配置

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:SSL:10m;

    ssl_session_timeout 1d;

    ssl_session_tickets off;

 

    # OCSP Stapling

    ssl_stapling on;

    ssl_stapling_verify on;

    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    resolver 223.5.5.5 119.29.29.29 valid=300s;

    resolver_timeout 5s;

 

    # 安全头

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    add_header X-Frame-Options SAMEORIGIN always;

    add_header X-Content-Type-Options nosniff always;

    add_header X-XSS-Protection "1; mode=block" always;

 

    # 网站根目录

    root /usr/share/nginx/html;

    index index.html index.php;

 

    location / {

        try_files $uri $uri/ =404;

    }

}

保存退出:Ctrl+O 回车Ctrl+X

补充:配置校验命令

bash
sudo nginx -t    # 检查配置语法
sudo systemctl restart nginx     #
重载生效
#
检查 Nginx 是否支持 SSL(输出包含 --with-http_ssl_module 即正常)

nginx -V 2>&1 | grep -o 'with-http_ssl_module'

# 验证 OCSP Stapling 是否生效,正常应显示:OCSP Response Status: successful

openssl s_client -connect example.com:443 -servername example.com -status | grep -i "OCSP Response Status"

# 访问 https://www.ssllabs.com/ssltest/ 输入域名检测,在线检测 SSL 配置评分(推荐)

4、手动模式适用场景

       80端口被其他程序占用,无法HTTP验证

       服务器禁止对外开放80端口

       多站点复杂环境、自定义Nginx虚拟主机配置,禁止程序自动篡改配置

       需要统一管理、备份、迁移证书,自定义证书存放路径

       生产严谨环境,所有配置必须人工可控

五、SSL证书自动续期(手动/自动模式通用)

Let’s Encrypt 证书仅90天有效期,必须依赖自动续期,否则网站SSL失效、浏览器报红。

1、测试续期(必须执行,校验环境是否正常)

bash                                                                                                                                                         
# --dry-run:模拟续期,不真正更新证书,仅测试
sudo certbot renew --dry-run

出现 The dry run was successful 代表续期环境正常。

2、真实手动续期命令

bash
sudo certbot renew #
自动续签快要到期的SSL证书  

sudo systemctl reload nginx     # 续期后重载Nginx

3、配置兜底自动续期定时任务

bash                                                                                                                                                
sudo touch /var/log/certbot-renew.log  #
创建日志文件

sudo chmod 644 /var/log/certbot-renew.log # 设置权限

which certbot   # 先确认 certbot 实际安装路径, 案例路径/usr/bin/certbot

sudo crontab -e  # 编辑定时任务                                                       


#
每天凌晨2点检测续期,成功重载Nginx

SHELL=/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 每天凌晨3点检测续期,证书更新成功后自动重载 Nginx

0 3 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx" >> /var/log/certbot-renew.log 2>&1

参数注释

       --quiet:静默执行,不输出冗余日志

       --deploy-hook:证书更新成功后,自动重载Nginx生效

六、常用运维命令大全(带完整注释)

bash

sudo certbot certificates   #
查看本机所有SSL证书、有效期、域名、状态
sudo certbot delete -d example.com    #
删除指定证书,example.com换成自己的实际域名
sudo systemctl status nginx         #
Nginx 状态
sudo systemctl reload nginx         #
重载Nginx,使新证书/新配置生效
sudo systemctl restart nginx         #
重启Nginx服务
sudo systemctl list-timers | grep certbot         #
查看certbot自动定时任务状态
crontab -l | grep certbot                               #
如未找到,也可用 crontab 检查
sudo ls -lh /var/log/certbot-renew.log  # 查看日志文件大小(避免长期运行后过大)
sudo tail -f /var/log/certbot-renew.log  #
查看最近续期日志
sudo grep -iE "error|fail|unsuccessful" /var/log/certbot-renew.log  #
查看是否有续期失败记录

 

全天候品质服务
全天候品质服务
快速客服响应
快速客服响应
客户价值为先
客户价值为先
多层安全防护
多层安全防护
QQ在线咨询
业务咨询:594128886
备案咨询:1165077278
微信扫码咨询
微信客服二维码

微信号:yuy1899

0451-85991100 工作日 09:00-18:00