Nginx 配置 HTTPS 与证书自动续期(certbot 实操)

用 certbot 为 Nginx 站点签发与续期 Let’s Encrypt 证书的完整流程,包含安装、首次签发、HTTP 强制跳转 HTTPS、续期定时任务配置与常见报错排查方法。

为什么必须启用 HTTPS

没有 HTTPS 的站点,浏览器会标注「不安全」,Google 已把 HTTPS 作为排名信号之一,支付与表单提交在明文通道下也存在被窃听的风险。Let’s Encrypt 提供免费证书,配合 certbot 可以做到全自动签发与续期,没有理由不启用。

安装 certbot

以 CentOS/Ubuntu 为例,优先使用系统包管理器安装 certbot 与其 Nginx 插件。安装后用 certbot –nginx 命令交互式选择域名,certbot 会自动修改 Nginx 配置、完成域名验证并写入证书路径。域名验证要求 80 端口可从公网访问,若服务器有防火墙或云安全组,需先放行 80。

配置强制跳转 HTTPS

签发成功后,把 80 端口站点返回 301 跳转到 https,确保所有 HTTP 访问都被引导到加密通道。若 certbot 已自动写入跳转,检查生成的 server 块即可;若自行配置,用 return 301 https://$host$request_uri; 的形式,注意保留 $request_uri 避免丢失查询参数。

推荐的 server 配置要点

  • ssl_protocols 仅启用 TLSv1.2 与 TLSv1.3
  • 配置 ssl_ciphers 使用强加密套件并开启 ssl_prefer_server_ciphers
  • 启用 HSTS 前先确认全站 HTTPS 正常,否则会把 HTTP 访问锁死
  • 配置 ssl_session_cache 复用会话,降低握手开销
  • 开启 HTTP/2 获得多路复用收益

自动续期

Let’s Encrypt 证书有效期 90 天。certbot 安装时通常会创建 systemd timer 或 cron 任务执行 renew。验证方式是运行 certbot renew –dry-run,看到成功提示即说明续期流程可用。默认续期检查每天运行两次,只有在证书剩余不足 30 天时才真正续签。若你改过 Nginx 配置导致续期流程失败,certbot 不会自动修好,需要留意通知邮件。

常见报错排查

现象 可能原因
验证失败 403/404 80 端口未放行,或已有配置把 /.wellmark 路径转发走
提示 connection refused Nginx 未运行或未监听 80
续期失败 域名 DNS 解析变更、端口被占、配置语法错误
浏览器仍提示不安全 页面存在混合内容(HTTP 资源),需改为 HTTPS

上线后检查

用外部工具检测证书链是否完整、到期时间是否正确,并手动访问一次 HTTP 确认跳转生效。把证书到期时间加入监控日志,即便自动续期在,也不该完全无人值守——续期失败往往在几周后才暴露。

Previous Article

Nginx 性能调优常用参数详解

Next Article

fail2ban 防 SSH 暴力破解实战

Write a Comment

Leave a Comment

Your email address will not be published. Required fields are marked *