2026年Nginx配置HTTPS全流程-从零到自动续期实战指南

摘要

Nginx配置HTTPS 已是 2026 年站长和开发者的必修课。本文带你从零搞定免费 SSL 证书申请、Nginx 极速安全部署与永久自动续期全流程!


一、引言:为什么你需要关注 2026 年的 HTTPS 配置?

在当今的互联网生态中,HTTPS 早已从"选配"变成了"强标配"。如果你的网站还在使用 HTTP,浏览器地址栏会直接弹窗警告"不安全",搜索引擎(如 Google、百度)也会对你的网站进行降权处理。

然而,进入 2026年 以后,免费 SSL 证书的申请与维护面临着空前的痛点:

  1. 免费证书有效期缩短至 3 个月 :自 2024 年起,阿里云、腾讯云等大厂以及 Let's Encrypt 的免费 DV 证书有效期,均已从 12 个月统一缩短至 90 天。这意味着你每年至少需要手动更新 4 次证书。
  2. 多域名维护噩梦 :云平台免费证书通常不支持泛域名(通配符) ,且每年有 20 张的额度限制。如果你手头有多个子域名(如 www, api, blog, admin),每 3 个月折腾一次手动替换,遗忘几乎是迟早的事。一旦证书过期,等待你的就是红色的拦截页面和业务的中断。

核心解决方案:使用 乐此云签实现"泛域名一键申请 + 命令行永久自动续期"。

本文将为你提供一份最全面、可直接复制的 Nginx配置HTTPS全流程指南,不仅包含最先进的 Nginx 安全与性能优化参数(如 TLS 1.3、HSTS、OCSP 装订),更带你一键配置自动续期,彻底解放双手!


二、第一步:零门槛获取免费 SSL 证书

在配置 Nginx 之前,我们需要先获得证书文件。这里我们推荐使用 乐此云签(letsssl.cn) 。它对 Let's Encrypt 的 ACME 协议进行了图形化包装,支持免费申请泛域名证书,且不限申请张数,支持一键生成自动续期脚本。

1. 证书申请流程

  1. 打开 乐此云签控制台,注册并登录账号。
  1. 点击 "申请证书"

  2. 填写你的域名信息:

    • 单域名 :直接填入你的域名,如 example.com

    • 泛域名 :强烈建议勾选 "泛域名,包含根域" ,填入 example.com。系统会同时保护 *.example.comexample.com,即一张证书搞定所有子域名!

  3. 点击 "提交申请,提交证书申请。

2. 轻松搞定域名验证(CNAME 验证)

为了证明你对域名的所有权,证书颁发机构(CA)需要进行安全验证。乐此云签提供了极为简便的 CNAME 验证方式

  1. 申请提交后,系统会生成一条 记录类型为 CNAME 的验证解析信息,包含 主机记录记录值

  2. 前往你的域名解析控制台(以阿里云为例):

    • 点击 添加记录
    • 选择 记录类型CNAME
    • 填入乐此云签提供的 主机记录记录值
    • TTL 选择默认(通常为 600 或 10 分钟)。
  3. 保存解析记录后,回到乐此云签页面,点击 "立即验证"

    注意:DNS 解析生效通常需要几分钟,个别情况可能需要更长时间。如果验证失败,等待 2-3 分钟后重试即可。

  4. 验证通过后,系统会在 1-2 分钟内完成签发。点击 "下载" 按钮,选择 Nginx (PEM) 格式下载。

解压下载的压缩包,你会得到两个核心文件:

  • xxx_certificate.pem:你的公钥证书(包含证书链)。
  • xxx_private.key:你的私钥文件(必须严格保密)。

三、第二步:Nginx HTTPS 基础配置与部署

拿到证书后,我们需要将其部署到 Linux 服务器上,并修改 Nginx 的配置文件。

1. 安全规范:上传并保护证书文件

请勿将私钥文件随意乱放。按照 Linux 安全规范,我们应该将其存放在 Nginx 的专用安全目录中,并严格限制文件访问权限:

bash 复制代码
# 1. 创建 Nginx 专属的 SSL 证书存放目录
sudo mkdir -p /etc/nginx/ssl

# 2. 将解压出来的证书文件(.pem)和私钥文件(.key)上传或移动到该目录下
sudo mv yourdomain_certificate.pem /etc/nginx/ssl/
sudo mv yourdomain_private.key /etc/nginx/ssl/

# 3. 严格限制文件权限,仅 root 用户可读写私钥,防止被服务器上其他恶意进程窃取
sudo chmod 700 /etc/nginx/ssl
sudo chmod 600 /etc/nginx/ssl/yourdomain_private.key
sudo chmod 644 /etc/nginx/ssl/yourdomain_certificate.pem
sudo chown -R root:root /etc/nginx/ssl

2. 实战编写:Nginx HTTPS 基础配置文件

我们在 /etc/nginx/conf.d//etc/nginx/sites-available/ 下为你的网站新建一个配置文件,例如 example.com.conf

下面是一份开箱即用、完全标准化的 Nginx HTTPS 配置文件。它不仅包含了 80 端口自动重定向到 443 的规则,还兼容了 Let's Encrypt 的 HTTP 验证路径,避免重定向导致验证失败:

nginx 复制代码
# ==========================================
# 1. HTTP 80 端口配置(强制重定向至 HTTPS)
# ==========================================
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # 兼容性设置:放行 Let's Encrypt 的 HTTP 验证路径(ACME Challenge)
    # 确保自动续期时的 HTTP 验证请求不被 301 重定向拦截,提高验证成功率
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;
        try_files $uri =404;
    }

    # 将所有其他 HTTP 流量 301 永久重定向到对应的 HTTPS 地址
    location / {
        return 301 https://$host$request_uri;
    }
}

# ==========================================
# 2. HTTPS 443 端口配置
# ==========================================
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;

    # 网站根目录及默认索引文件
    root /var/www/html;
    index index.html index.htm;

    # 证书文件路径配置
    ssl_certificate /etc/nginx/ssl/yourdomain_certificate.pem;
    ssl_certificate_key /etc/nginx/ssl/yourdomain_private.key;

    # 基础安全套件:仅启用安全的 TLS v1.2 和 TLS v1.3,彻底禁用不安全的 SSLv3, TLSv1.0, TLSv1.1
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # 推荐的高强度加密套件(优先采用支持前向安全 PFS 的算法)
    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;

    # 业务请求路由配置
    location / {
        try_files $uri $uri/ =404;
    }

    # 开启静态资源强缓存,提升 HTTPS 页面加载速度
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, no-transform, immutable";
        access_log off;
    }
}

编写完成后,执行以下命令验证并生效:

bash 复制代码
# 测试 Nginx 配置文件语法是否正确
sudo nginx -t

# 如果提示 syntax is ok, test is successful,则平滑重启 Nginx
sudo systemctl reload nginx

四、第三步:HTTPS 高性能与高安全优化(运维进阶)

仅仅配通 443 端口是不够的。HTTPS 引入的 SSL/TLS 握手阶段会增加多次网络往返(RTT),并对服务器 CPU 带来一定的加解密算力消耗。

通过以下三项高级配置,我们可以将网站的安全评级提升至 SSL Labs A+,并大幅提升页面加载速度。

1. 启用 HTTP/2 协议(大幅减少请求延迟)

HTTP/2 支持多路复用,允许在单条 TCP 连接上并发发送多个请求,消除了 HTTP/1.1 的线头阻塞问题。在 Nginx 中启用非常简单:

在 Nginx 1.25.1 之前,配置为:

nginx 复制代码
listen 443 ssl http2;

Nginx 1.25.1+ 起,Nginx 废弃了在该指令中连写的写法,推荐改用独立的 http2 指令:

nginx 复制代码
listen 443 ssl;
http2 on; # 启用 HTTP/2 协议

2. 启用 HSTS(强制客户端浏览器使用 HTTPS)

HSTS(HTTP Strict Transport Security)可以通过响应头告知浏览器:在接下来的指定时间内,任何针对该域名的 HTTP 请求,都必须在浏览器内部强制转换为 HTTPS 请求再发出。这能完美防范降级攻击(SSL Stripping)。

在 HTTPS 的 server 块中加入:

nginx 复制代码
# 强制浏览器在未来 1 年内(31536000秒)对该域名全部使用 HTTPS 访问,包含子域名
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

3. 配置 OCSP 装订(OCSP Stapling)

OCSP(在线证书状态协议) 的作用是让浏览器在握手时去 CA 服务器查询"当前证书有没有被吊销"。默认情况下,浏览器会在握手时实时发送请求给 CA,如果 CA 服务器延迟较高,就会明显拖慢网站的首次白屏时间。

OCSP 装订(OCSP Stapling) 则是让 Nginx 服务器在后台定期去 CA 拉取好证书状态,缓存在服务器本地。当浏览器发起连接时,Nginx 直接把这个带签名的状态"装订"在证书里发给浏览器,浏览器无需再去请求 CA,直接省去一次网络往返,握手速度飞起

在 HTTPS 的 server 块中添加:

nginx 复制代码
# 开启 OCSP 装订,由 Nginx 代替浏览器去向 CA 查询证书状态
ssl_stapling on;
ssl_stapling_verify on;

# 指定可信的 DNS 解析服务器,用于解析 CA 的 OCSP 域名
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;

4. 优化 SSL 会话缓存(降低 CPU 开销)

为了避免每次客户端请求都进行完整的 SSL 握手,我们需要配置会话缓存和会话凭证,实现会话复用(Session Resumption):

nginx 复制代码
# 配置 SSL 共享会话缓存,大小为 10MB(大约可缓存 40000 个会话)
ssl_session_cache shared:SSL:10m;

# 会话超时时间设为 1 天,增加复用几率,减轻 CPU 握手开销
ssl_session_timeout 1d;

# 禁用 session tickets,防止因主密钥泄露导致历史通信流量被破解(完美前向安全)
ssl_session_tickets off;

五、第四步:一键配置自动续期,告别证书过期尴尬

前文提到,2026 年的免费 SSL 证书有效期仅有 90 天,手动替换繁琐且极易遗漏。

乐此云签 提供了一套完美的轻量化自动续期方案。平台会在证书到期前 30天内 自动向 Let's Encrypt 重新发起签发申请,并提供专属的部署脚本。

我们只需要将生成的脚本一次性配置在 Linux 服务器的 cron 定时任务中,脚本每 15 天会自动检查一次证书状态,一旦发现新证书,便会自动下载、覆盖旧证书并重载 Nginx,全程零人工干预!

1. Linux + Nginx 自动续期实战

  1. 登录乐此云签控制台,在你的证书列表中,点击对应证书的 "自动续期" 按钮。

  2. 填写自动续期参数:

    • 服务器类型 :选择 Nginx
    • 证书存放路径/etc/nginx/ssl/yourdomain_certificate.pem
    • 私钥存放路径/etc/nginx/ssl/yourdomain_private.key
    • 重载命令systemctl reload nginx(或者 nginx -s reload)。
  3. 点击生成后,平台会为您生成一条专属的 一键部署命令

  4. 在 Linux 服务器上,以 root 用户权限 打开终端,直接粘贴并执行该命令:

bash 复制代码
# 乐此云签自动续期命令示例
curl -o /usr/bin/letsencrypt-renew https://letsssl.cn/download/letsencrypt-renew
chmod +x /usr/bin/letsencrypt-renew
crontab -l > /etc/crontab && echo '30 2 10,25 * * root /usr/bin/letsencrypt-renew -token=你的Token -key_path=/etc/nginx/ssl/yourdomain_private.key -server_type=nginx -cert_path=/etc/nginx/ssl/yourdomain_certificate.pem -command="systemctl reload nginx" -backup=true ' >> /etc/crontab
crontab /etc/crontab
/usr/bin/letsencrypt-renew -token=你的Token -key_path=/etc/nginx/ssl/yourdomain_private.key -server_type=nginx -cert_path=/etc/nginx/ssl/yourdomain_certificate.pem -command="systemctl reload nginx" -backup=true

原理说人话:

  • 第一行使用 curl 下载乐此云签专用的轻量级续期工具 letsencrypt-renew,并赋予可执行权限。
  • 第二行将一条定时任务写入系统的 crontab(每月 10 号和 25 号的凌晨 2:30 执行)。
  • 第三行会立即执行一次该续期脚本,用于验证当前 Token、路径权限及 Nginx 重载命令是否完全正确。
  • -backup=true 参数表示在更新证书前,会自动将旧证书进行备份(命名为 .backup_年月日),万一更新过程网络异常,可以瞬间回滚,绝对保证业务高可用!

六、常见错误与故障排查(QA速查手册)

在配置 Nginx HTTPS 的过程中,我们整理了站长们最常遇到的 4 个经典报错及解决方案:

Q1:配置 HTTPS 后,通过浏览器访问网站一直处于加载状态,最终提示"连接超时"?

  • 根本原因:你的服务器 443 端口未开放。
  • 解决方案
    1. 检查云服务器安全组/网络ACL :登录阿里云/腾讯云控制台,在安全组入站规则中,确保放行了 TCP 443 端口。
    2. 检查系统防火墙 :如果你开启了系统防火墙,需要手动放行:
      • Ubuntu (UFW) : sudo ufw allow 443/tcp && sudo ufw reload
      • CentOS (Firewalld) : sudo firewall-cmd --zone=public --add-port=443/tcp --permanent && sudo firewall-cmd --reload

Q2:Nginx 启动或重载报错:diretive ssl_certificate is not allowed here

  • 根本原因:你把 SSL 配置指令放到了错误的位置。
  • 解决方案 :Nginx 的 ssl_certificatessl_certificate_key 指令只能 放置在 server 块内,不能直接放在 http 块的最外层(除非作为全局默认值配置且符合上下文)。请检查你的配置文件括号是否闭合正确。

Q3:配置 HTTPS 后,网页能够访问,但地址栏小锁图标有黄色感叹号,提示"混合内容(Mixed Content)"?

  • 根本原因 :你的 HTML 网页中硬编码引入了 http:// 协议的外部静态资源(如图片、JS、CSS 链接)。
  • 解决方案
    1. 尽量将资源链接改为相对路径,或者将 http:// 替换为 https://

    2. 在 Nginx 的 HTTPS 响应头中加入安全指令,强制浏览器将所有的 HTTP 请求在前端无缝升级为 HTTPS,一键消除感叹号:

      nginx 复制代码
      add_header Content-Security-Policy "upgrade-insecure-requests";

Q4:定时任务续期失败,日志中显示 permission deniednginx command not found

  • 根本原因 :定时任务 cron 默认的执行环境变量与登录终端不同,可能找不到全局的 nginx 路径;或者定时任务未使用 root 权限运行。
  • 解决方案
    1. 确保在 crontab 中配置的任务使用的是 root 账户,或者配置重载命令时使用 Nginx 的绝对路径,例如将 -command="nginx -s reload" 改为绝对路径 -command="/usr/sbin/nginx -s reload"
    2. 检查你配置的本地证书保存路径是否存在,且当前运行脚本的账户拥有写权限。

七、2026年 Nginx HTTPS 配置安全合规自查表

在你的网站正式上线前,请对照以下 Checklist 完成最后一步核对,确保安全防线无懈可击:

  • 80 端口自动跳转 :已配置并生效(访问 http 协议自动 301 跳转至 https)。
  • ACME 路径放行 :80 端口配置中已加入对 /.well-known/acme-challenge/ 路径的放行,确保证书自动续期顺畅。
  • 高强度协议套件:已禁用 TLS 1.0 和 TLS 1.1,仅放行 TLS 1.2 & TLS 1.3。
  • 私钥权限受控 :证书私钥文件(.key)的权限已设为最高级别的 600,且所有者为 root
  • HSTS 强制保护 :已配置 Strict-Transport-Security 头。
  • OCSP 装订提速 :已成功开启 ssl_stapling 且解析 DNS 正常工作。
  • 自动续期测试成功 :手动运行续期脚本,日志显示 success,定时计划任务已成功注入系统的 crontab

八、总结

通过本文的实战,我们实现了 Nginx配置HTTPS 的终极目标:用最安全的姿势、最快的速度,实现终身免费且高可用的全自动托管

在 90 天证书有效期成为行业铁律的今天,利用 乐此云签 (letsssl.cn) 图形化平台一键申请,配合本地轻量级自动续期脚本,是目前站长和企业开发者最具性价比、最省时省力的 HTTPS 方案。花上 10 分钟配置一次,你的网站便将永久被绿色安全锁守护,彻底告别过期尴尬!


相关阅读推荐

相关推荐
外滩运维专家20 小时前
Nginx 上的通配符证书 90 天到期,续签这事我是这么搞的
运维
科技新资讯20 小时前
国内AI影视制作服务商哪家口碑好
运维·人工智能·devops
IT摆渡者1 天前
ubuntu系统网络问题
linux·运维·ubuntu
kdxiaojie1 天前
Linux 驱动研究 —— SDIO (1)
linux·运维·笔记·学习·sdio
ZzzZZzzzZZZzzzz…1 天前
K8S实战:NFS+StorageClass+PV/PVC+Deployment
运维·云原生·容器·kubernetes·storageclass·linux运维·持久卷
BerrySen1781 天前
一个 JDBC 参数引发的架构演进:Apache SeaTunnel 如何解决数据同步中的“定时 Flush”难题
运维·自动化·zabbix
杨_晨1 天前
Linux查看本地环境变量的命令
linux·运维·服务器
草莓熊Lotso1 天前
【Linux网络】从0手写Reactor反应堆(二):完善核心细节——ET非阻塞读写、分层架构与回调机制
linux·运维·服务器·网络·c++·tcp/ip·架构
xlq223221 天前
高并发服务器day21
运维·服务器
Brilliantwxx1 天前
【Linux】 第一个程序终端进度条
linux·运维·服务器