部署 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 -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 年 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 年 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 |
文章标签
- 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
共 0 条评论