当前位置: 首页 > news >正文

Nginx 通过 Let‘s Encrypt 实现 HTTPS 访问全流程指南

一、Let’s Encrypt 与 Certbot 简介

Let’s Encrypt 是由非营利组织 ISRG 运营的免费证书颁发机构(CA),旨在推动 HTTPS 的普及。其核心工具 Certbot 能自动化完成证书申请、部署与续期,大幅降低 HTTPS 的配置复杂度。通过 Certbot 与 Nginx 的集成,用户可在 5 分钟内完成全流程配置 。


二、环境准备

1. 系统要求
  • 操作系统:支持 CentOS 7+Ubuntu 18.04+ 等主流 Linux 发行版
  • 已安装 Nginx 并配置至少一个虚拟主机
  • 域名解析:需将域名(如 example.com)的 A 记录指向服务器公网 IP
  • 防火墙放行:确保 80(HTTP)443(HTTPS) 端口开放
2. 安装 Certbot 与依赖
# CentOS 7
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

注:python3-certbot-nginx 插件使 Certbot 能直接修改 Nginx 配置


三、证书申请与自动配置

1. 单域名证书申请
sudo certbot --nginx -d example.com -d www.example.com

流程说明

  1. 输入邮箱用于接收证书到期提醒
  2. 同意服务条款(输入 A 确认)
  3. 选择是否将 HTTP 流量重定向至 HTTPS(推荐选 2
  4. Certbot 自动验证域名所有权并更新 Nginx 配置
2. 泛域名证书申请
sudo certbot certonly --manual --preferred-challenges=dns -d *.example.com

操作要点

  • 需手动在 DNS 解析中添加 _acme-challenge 的 TXT 记录
  • 验证成功后证书路径:/etc/letsencrypt/live/example.com/

四、Nginx 手动配置 HTTPS

若需自定义配置,可手动修改 Nginx 虚拟主机文件(如 /etc/nginx/conf.d/example.conf):

server {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_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;# 强制 HTTP 重定向if ($scheme != "https") {return 301 https://$host$request_uri;}# 其他配置(如静态资源路径、反向代理等)root /var/www/html;index index.html;
}

配置完成后执行 sudo nginx -t 验证语法,再 systemctl reload nginx 生效


五、证书自动续期

Let’s Encrypt 证书有效期为 90 天,需定期续期。通过 crontab 设置自动任务:

# 编辑定时任务
sudo crontab -e# 添加以下行(每天 3 点检查续期)
0 3 * * * /usr/bin/certbot renew --quiet

注:--quiet 参数抑制非错误输出,适合生产环境


六、高级配置优化

1. OCSP 装订(提升 SSL 握手速度)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 valid=300s;
2. 安全增强
  • HSTS 头:强制浏览器使用 HTTPS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    
  • 禁用弱加密算法
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    
3. 性能优化
  • 启用 HTTP/2:listen 443 ssl http2;
  • 会话复用:ssl_session_cache shared:SSL:10m;

七、常见问题排查

1. 证书申请失败
  • DNS 未生效:通过 dig example.com 验证解析
  • Nginx 配置错误:确保 server_name 与域名一致,且 80 端口开放
2. HTTPS 无法访问
  • 检查防火墙规则:sudo firewall-cmd --list-ports
  • 验证证书路径权限:确保 Nginx 用户有读取权限
3. 续期失败
  • 手动测试:sudo certbot renew --dry-run
  • 检查日志:tail -f /var/log/letsencrypt/letsencrypt.log

总结

通过 Let’s Encrypt 与 Nginx 的集成,开发者可快速实现 HTTPS 部署并享受以下优势:

  1. 零成本:免费证书节省企业开支
  2. 自动化:Certbot 简化申请与续期流程
  3. 安全性:支持 TLS 1.3 等最新协议
  4. 高性能:通过 OCSP 装订和 HTTP/2 提升访问速度

建议定期检查证书状态,并参考 Mozilla SSL Configuration Generator 获取最新安全配置模板。如需深度定制(如多域名负载均衡),可结合 Kubernetes 等容器编排工具实现 。

相关文章:

  • 大模型是如何生成内容的?
  • Linux基础使用-笔记
  • 第三篇:Django创建表关系及生命周期流程图
  • Macbook M系列Arm设置任何来源安装第三方软件,安装Notepad--
  • 点云配准算法之NDT算法原理详解
  • 【信息系统项目管理师】高分论文:论进度管理和成本管理(智慧城管平台项目)
  • 树莓派的系统烧录
  • 私钥连接服务器(已经有服务器私钥
  • 【前端】ES6 引入的异步编程解决方案Promise 详解
  • 删除排序数组中的重复项--LeetCode
  • 基于Matlab的车牌识别系统
  • 2025年3月电子学会青少年机器人技术(六级)等级考试试卷-理论综合
  • wait_event 类接口详解
  • vue3创建项目
  • 重构智能场景:艾博连携手智谱,共拓智能座舱AI应用新范式
  • STM32移植最新版FATFS
  • React在什么情况下需要用useReducer
  • 电商Redis热点数据缓存实施规划
  • 从节点重排看React 与 Vue3 的 Diff 算法
  • 1、AI及LLM基础:Python语法入门教程
  • 移动互联网未成年人模式正式发布
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 匈牙利国会通过退出国际刑事法院的决定
  • 哈莉·贝瑞、洪常秀等出任戛纳主竞赛单元评委
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 武汉一季度GDP为4759.41亿元,同比增长5.4%