怀念夏天 发表于 前天 12:58

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
流程说明:

[*]输入邮箱用于吸收证书到期提醒
[*]同意服务条款(输入 A 确认)
[*]选择是否将 HTTP 流量重定向至 HTTPS(保举选 2)
[*]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 头:强制浏览器使用 HTTPSadd_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 部署并享受以下优势:

[*]零成本:免费证书节省企业开支
[*]主动化:Certbot 简化申请与续期流程
[*]安全性:支持 TLS 1.3 等最新协议
[*]高性能:通过 OCSP 装订和 HTTP/2 提升访问速度
发起定期检查证书状态,并参考 Mozilla SSL Configuration Generator 获取最新安全配置模板。如需深度定制(如多域名负载均衡),可结合 Kubernetes 等容器编排工具实现 。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Nginx 通过 Let‘s Encrypt 实现 HTTPS 访问全流程指南