-
部署 Let's Encrypt 免费 SSL 证书及自动续期
一、环境说明
- 操作系统: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 -lacme.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 年 02 月
1
2026 年 01 月
3
2025 年 10 月
2
2025 年 09 月
1
2025 年 04 月
1
2025 年 01 月
1
2024 年 12 月
1
2024 年 11 月
1
2024 年 10 月
2
2024 年 09 月
2
文章日历
| 2026 年 02 月 | ||||||
|---|---|---|---|---|---|---|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
| 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 |
文章标签
- Linux
- Go
- Yii
- 新浪
- CentOS
- PHP
- Git
- WSL
- Composer
- Mac
- 入职
- Bootstrap
- 翻译
- UCenter
- 厦门
- 出差
- 长沙
- 湖南卫视
- 微博
- Tengine
- YUI
- 泰国
- pecl
- 优化
- GitLab
- 迁移
- rootless
- 年会
- 生日
- Tengin
- RedHat
- Sphinx
- cygwin
- Windows
- Tmux
- Zsh
- 升级
- MySQL
- sql_mode
- Shadowsockets
- 面向对象
- HTTP
- 状态码
- grep
- unoconv
- PPT
- Nginx
- htpasswd
- golang
最新评论
-
Tengine 2.2.2 配置 http2 协议出现的坑 -
Yii China 是官方唯一认可的中文社区 -
Go 语言中 json 的操作以及常见问题 -
新浪赴泰国曼谷和芭提雅团建 -
CentOS 安装 PHP7 -
WordPress 如何控制每页显示的条数 -
关于 phpMyAdmin 免输入用户名和密码,直接进入管理界面 -
PHP 5.4 的新特性 -
PHP 5.4 的新特性 -
PHP 5.4 的新特性