Post

Let's Encrypt证书申请与Nginx配置实战

2026-05-07

使用 Let’s Encrypt 为 Nginx 配置免费 SSL 证书

概述

本文详细说明如何通过 Let’s Encrypt 为 Nginx 服务器申请免费 SSL 证书,涵盖证书申请流程、Nginx 配置方法、自动续期策略及常见问题处理。重点在于通过命令行操作实现安全的 HTTPS 部署,并提供可复用的自动续期脚本模板。


证书申请流程

准备工作

  1. 安装依赖工具
    确保系统已安装 Git 和 Python(建议 2.7 以上版本):

    git --version  # 检查 Git 是否安装
    yum install git  # 若未安装则通过包管理器安装
    python -V  # 验证 Python 版本
    
  2. 克隆 Let’s Encrypt 客户端
    从 GitHub 获取官方客户端:

    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    

证书生成方式

方法一:自动交互式申请

./letsencrypt-auto

执行后按提示操作:

  1. 输入邮箱地址(用于续期通知)
  2. 选择 A(申请证书)
  3. 选择 Y(接受条款)
  4. 输入域名(支持多域名,用空格或逗号分隔)

方法二:非交互式申请

./letsencrypt-auto certonly --standalone \
  --email your_email@example.com \
  -d example.com -d www.example.com

注意:--standalone 模式需确保 80 端口未被占用。


Nginx 配置 SSL 证书

证书文件说明

生成的证书文件位于 /etc/letsencrypt/live/your_domain/,关键文件包括:

  • fullchain.pem:Nginx 需要的完整证书链
  • privkey.pem:私钥文件

配置 Nginx 服务器块

在 Nginx 配置文件中(通常位于 /etc/nginx/sites-available/),添加以下内容:

server {
    listen 443 ssl;
    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;

    # 其他 HTTPS 配置...
}

若已有配置,确保路径正确,避免残留旧配置。


证书续期策略

手动续期命令

./letsencrypt-auto certonly --renew-by-default \
  --email your_email@example.com \
  -d example.com -d www.example.com

自动续期脚本

创建脚本文件(如 /opt/renewCerts.sh):

#!/bin/sh
# 检查续期状态并记录日志
if ! /opt/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1; then
    echo "自动续期失败:"
    cat /var/log/letsencrypt/renew.log
    exit 1
fi

设置执行权限并配置 cron:

chmod +x /opt/renewCerts.sh
crontab -e
# 添加以下行,每月凌晨 1 点执行
0 0 1 * * /bin/sh /opt/renewCerts.sh

常见问题与注意事项

1. 证书有效期与续期限制

  • Let’s Encrypt 证书有效期为 90 天,需手动或自动续期。
  • 每周申请次数有限,频繁删除证书重新申请可能导致限流。

2. 国内服务器配置问题

  • 放行 443 端口:国内云服务器(如阿里云)需在安全组中开放 443 端口,否则证书申请会失败。
  • 重启服务:配置完成后需重启 Nginx 和防火墙服务。

3. 证书删除与重新申请

Let’s Encrypt 不支持直接删除域名,需手动清理旧证书:

rm -rf /etc/letsencrypt/live/www.example.com/
rm -rf /etc/letsencrypt/archive/www.example.com/
rm /etc/letsencrypt/renewal/www.example.com.conf

重新申请时可使用 --webroot 模式:

letsencrypt certonly --webroot -w /var/www/example \
  -d example.com -d www.example.com

4. Nginx 配置残留问题

删除证书后,若 Nginx 配置文件未更新,可能导致服务异常。需检查并修改配置文件路径。


总结

通过 Let’s Encrypt 为 Nginx 配置 SSL 证书是实现 HTTPS 的低成本方案,但需注意证书续期和服务器配置细节。本文提供的命令和脚本可直接用于生产环境,但需根据实际服务器环境调整路径和权限。对于多域名场景,建议使用自动化工具(如 Certbot)简化操作流程。