2026新版CentOS/Rocky/Alma Linux服务器Nginx配置Let's Encrypt免费SSL证书教程(自动续期+HTTPS强制跳转)
采用 Let's Encrypt 免费SSL证书,证书有效期90天,支持自动免费续期(按 Let's Encrypt 现行政策)。分为自动模式(Nginx插件自动配置)和手动模式(仅获取证书,不改动网站配置)。所有example.com为占位符,必须替换为真实域名。
适用系统: CentOS/Rocky/Alma Linux
前置条件
•
域名已成功解析到服务器公网IP
•
服务器防火墙/安全组放行 80、443 端口
•
Nginx 服务正常运行,网站可正常访问
自动VS手动 总结对照表
|
方式 |
优点 |
缺点 |
适用场景 |
|
自动申请 |
一键部署、自动写配置、自动跳转、零门槛 |
会自动修改Nginx配置,复杂站点易冲突 |
新手、简单单站点、快速上线、标准环境 |
|
手动申请 |
完全可控、不改配置、支持通配符、适配端口被封场景 |
需要自己写虚拟主机配置,操作繁琐 |
生产环境、复杂多站点、80端口占用、通配符证书、严谨运维 |
1、防火墙放行端口
# 防火墙放行80、443端口,如果使用云主机在云平台也需要放行
|
bash |
2、SELinux 状态检查与处理
CentOS
/ Rocky / Alma Linux 默认开启 SELinux,会阻止 Certbot 操作 Nginx 与证书文件,导致 HTTPS 无法启动。
|
bash # 查看当前 SELinux 状态,Enforcing=开启 Permissive=仅警告 Disabled=关闭 sudo getenforce # 方案 1:临时关闭(重启失效,用于快速测试) # 方案 2:保留 SELinux 并正确放行(安全,官方推荐) # 方案 3:永久关闭(简单省事,但不推荐生产环境) |
3、安装证书工具 Certbot
二选一安装方式,推荐 DNF 简单版
方式 1:dnf 安装(推荐小白)
|
Bash sudo dnf install -y epel-release # 安装 EPEL 源(必须) |
方式 2:Snap 安装(版本更新)
|
bash sudo dnf install -y snapd # 安装 snapd 软件包管理器 # 【新增】安装 snap 核心组件 sudo snap install --classic certbot # 安装 certbot 证书申请工具 # 创建软链接,让系统能全局识别 certbot 命令 # 【优化】创建系统软链接,使 snap 命令全局生效(兼容最小化系统) sudo ln -s /var/lib/snapd/snap /snap 2>/dev/null ||
true sudo systemctl status snapd.socket --no-pager # 【新增】检查 snapd 状态 |
验证安装:
|
bash |
自动模式会修改 /etc/nginx/ 下的虚拟主机配置,强烈建议在执行前备份,这是运维基本规范。
|
Bash |
1、核心命令
|
bash |
2、交互步骤说明
•
输入邮箱:用于证书到期告警
•
Y:同意用户协议
• 选择 Redirect/重定向选项:开启永久跳转选2(所有http自动跳转https)
注:Certbot 新版本交互流程可能有调整,建议注明"根据提示操作即可"
3、自动模式适用场景
•
新手用户、不想手动修改配置文件
•
自动修改 Nginx 配置、开启 HTTPS
•
自动设置 80 端口
301 跳转 HTTPS
手动模式只生成证书文件,不会改动任何Nginx配置,所有配置需要自己写,所有example.com必须替换为真实域名。
1、HTTP验证(80端口正常可用、推荐)
|
bash |
2、DNS 验证(适用于 80 端口被占用 / 封禁场景;本教程不含 DNS 插件安装教程,纯手动 DNS 证书无法自动续期)
|
bash |
DNS 验证操作步骤:
- 执行上述命令后,终端会显示类似 _acme-challenge.example.com 的 TXT 记录名称和记录值
- 登录你的域名解析商(如阿里云、腾讯云、Cloudflare 等)控制台
- 添加一条 TXT 记录:主机记录填 _acme-challenge,记录值填终端提供的字符串
- 等待 DNS 生效(通常 1-5 分钟,部分服务商可能需要 10 分钟)
- 按回车继续,Certbot 会自动验证 DNS 记录
- 验证通过后,证书会生成在 /etc/letsencrypt/live/ 目录下
⚠️ 注意:申请通配符证书 *.example.com时,通常需要同时添加 -d example.com(根域名),否则根域名无法使用该证书。
3、手动编辑 Nginx 配置
证书统一存放路径:/etc/letsencrypt/live/你的域名/
|
bash |
|
nginx 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 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 |
出现 The dry run was successful 代表续期环境正常。
2、真实手动续期命令
|
bash sudo systemctl
reload nginx # 续期后重载Nginx |
3、配置兜底自动续期定时任务
|
bash sudo chmod 644
/var/log/certbot-renew.log # 设置权限 which certbot # 先确认 certbot 实际安装路径, 案例路径/usr/bin/certbot sudo crontab -e # 编辑定时任务
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 |
联系我们
- 电话咨询: 0451-85991100
- QQ咨询: 594128886
- 业务咨询: 1165077278
- 在线咨询