部署 Let's Encrypt 免费 SSL 证书及自动续期

26-02-02 10:30 4 0 技术

一、环境说明

  • 操作系统:AlmaLinux 9.7
  • Web 服务:Docker Nginx
  • 证书机构:Let’s Encrypt
  • 证书管理:acme.sh
  • 验证方式:HTTP-01
  • 证书算法:ECC P-256

使用 acme.sh 管理 Let’s Encrypt 证书,实现自动申请、自动续期和自动部署,不需要阿里云 AccessKey,也不需要手动添加 DNS TXT 记录。

二、Nginx 配置

当前 Docker Compose 已经挂载:

- ${PROJECT_FOLDER}:/var/www/html/:rw
- ./nginx/ssl:/etc/nginx/ssl

因此直接复用现有目录,不需要增加 Docker Volume。

修改 Nginx 配置,将 HTTP 和 HTTPS 分开:

# HTTP:证书验证及 HTTPS 跳转
server {
    listen 80;
    server_name cuiliang.com www.cuiliang.com
                cuiliang.com.cn www.cuiliang.com.cn;

    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;
        default_type text/plain;
        autoindex off;
        try_files $uri =404;
    }

    location / {
        return 301 https://www.cuiliang.com$request_uri;
    }
}

# HTTPS:正式业务服务
server {
    listen 443 ssl http2;
    server_name cuiliang.com www.cuiliang.com
                cuiliang.com.cn www.cuiliang.com.cn;

    if ($host != www.cuiliang.com) {
        return 301 https://www.cuiliang.com$request_uri;
    }

    ssl_certificate /etc/nginx/ssl/www.cuiliang.com/server.crt;
    ssl_certificate_key /etc/nginx/ssl/www.cuiliang.com/server.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:
                ECDHE-RSA-AES128-GCM-SHA256:
                ECDHE-ECDSA-AES256-GCM-SHA384:
                ECDHE-RSA-AES256-GCM-SHA384;

    location / {
        proxy_pass http://go:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

三、安装并申请证书

安装 acme.sh:

curl https://get.acme.sh | sh -s email=你的邮箱

设置 Let’s Encrypt:

~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

创建验证目录:

mkdir -p /root/www/.well-known/acme-challenge

申请证书:

~/.acme.sh/acme.sh --issue \
  --server letsencrypt \
  --webroot /root/www \
  -d cuiliang.com \
  -d www.cuiliang.com \
  -d cuiliang.com.cn \
  -d www.cuiliang.com.cn \
  --keylength ec-256

注意:所有域名都需要正确解析到服务器,公网 TCP 80 端口必须可以访问。

四、安装证书及自动续期

创建证书目录:

mkdir -p /root/docker/nginx/ssl/www.cuiliang.com

安装证书:

~/.acme.sh/acme.sh --install-cert \
  -d cuiliang.com \
  --key-file /root/docker/nginx/ssl/www.cuiliang.com/server.key \
  --fullchain-file /root/docker/nginx/ssl/www.cuiliang.com/server.crt \
  --reloadcmd "docker exec nginx nginx -t && docker exec nginx nginx -s reload"

修改 HTTPS 配置后,检查并 Reload Nginx:

docker exec nginx nginx -t
docker exec nginx nginx -s reload

自动续期

acme.sh 安装时会自动创建 Cron 定时任务,无需手动添加。

查看定时任务:

crontab -l

acme.sh 会定期检查证书有效期,到达续期条件后自动申请新证书、更新证书文件,并执行 Nginx Reload。

五、常用维护命令

# 查看证书
~/.acme.sh/acme.sh --list

# 查看证书有效期
openssl x509 -in /root/docker/nginx/ssl/www.cuiliang.com/server.crt -noout -dates

# 检查 Nginx 配置
docker exec nginx nginx -t

# 手动 Reload Nginx
docker exec nginx nginx -s reload

至此,Let’s Encrypt 免费 SSL 证书部署完成,实现证书自动申请、自动续期和 Docker Nginx 自动加载,无需手动维护证书。

请登录后发表评论 点击登录

文章归档

文章日历

2026 年 11 月
日 一 二 三 四 五 六
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
30 01 02 03 04 05 06

文章标签

最新评论

友情链接