优雅的配置永久SSL
字数: 0 字 时长: 0 分钟
acem.sh
1panel
Encrypt免费证书
这里使用 Let’s Encrypt 提供的免费 SSL 证书,并通过 Certbot 工具自动获取和安装。以下是具体步骤:
由于 Certbot 无法直接与 Docker 部署的 Nginx 交互,你可以使用 Certbot 的 standalone 模式,这需要暂时停止占用 80 端口的 Nginx 容器。
在获取证书之前,停止 Nginx 容器以释放 80 端口:
Bash
docker-compose down
使用以下命令获取证书:
Bash
sudo certbot certonly --standalone -d leocoder.cn -d picture.leocoder.cn
certonly:仅获取证书,不自动配置。
--standalone:Certbot 启动一个临时的 web 服务来完成验证。
-d:指定域名。
获取成功后,证书将存储在 /etc/letsencrypt/live/ 目录中。
然后将证书复制到 Nginx 可访问的目录
Certbot 生成的证书通常位于 /etc/letsencrypt/live/yourdomain.com/ 目录下。您需要将这些证书文件复制到 Nginx 配置目录 /etc/ssl/certs/ 和 /etc/ssl/private/:
Bash
sudo cp /etc/letsencrypt/live/leocoder.cn/fullchain.pem /etc/ssl/certs/leocoder.cn.crt
sudo cp /etc/letsencrypt/live/leocoder.cn/privkey.pem /etc/ssl/private/leocoder.cn.key
首先,您需要确保目标目录存在。你可以通过以下命令创建所需的目录:
Bash
sudo mkdir -p /etc/ssl/private
sudo mkdir -p /etc/ssl/certs
修改nginx.conf 文件
Bash
events {
worker_connections 1024; # 最大连接数
}
http {
include /etc/nginx/mime.types; # 载入文件类型
default_type application/octet-stream; # 默认文件类型
sendfile on; # 启用文件发送
keepalive_timeout 65; # 设置保持连接时间
# 主域名网站
server {
listen 80;
server_name leocoder.cn;
return 301 https://$host$request_uri; # 强制 HTTP 重定向到 HTTPS
}
server {
listen 443 ssl;
server_name leocoder.cn;
ssl_certificate /etc/ssl/certs/leocoder.cn.crt;
ssl_certificate_key /etc/ssl/private/leocoder.cn.key;
root /usr/share/nginx/blog;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# 二级域名网站
server {
listen 80;
server_name picture.leocoder.cn;
return 301 https://$host$request_uri; # 强制 HTTP 重定向到 HTTPS
}
server {
listen 443 ssl;
server_name picture.leocoder.cn;
ssl_certificate /etc/ssl/certs/leocoder.cn.crt;
ssl_certificate_key /etc/ssl/private/leocoder.cn.key;
# 前端服务
location / {
root /usr/share/nginx/picture/frontend;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端服务代理
location /api/ {
proxy_pass http://picture-backend:18888/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
63,1 Bot
修改 docker-compose 文件
Bash
version: '3.9'
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /opt/software/data/nginx/nginx.conf:/etc/nginx/nginx.conf
- /opt/software/data/blog/dist:/usr/share/nginx/blog
- /opt/software/data/picture/frontend/dist:/usr/share/nginx/picture/frontend
- /etc/letsencrypt/live/leocoder.cn/fullchain.pem:/etc/ssl/certs/leocoder.cn.crt:ro
- /etc/letsencrypt/live/leocoder.cn/privkey.pem:/etc/ssl/private/leocoder.cn.key:ro
networks:
- proxy_network
restart: always
picture-backend:
image: openjdk:17
container_name: picture-backend
volumes:
- /opt/software/data/picture/backend:/app
working_dir: /app
command: ["java", "-jar", "lg-picture-backend-1.0-SNAPSHOT.jar", "--server.port=18888"]
networks:
- proxy_network
restart: always
networks:
proxy_network:
driver: bridge
完成上述步骤后,重新部署服务
Bash
docker-compose up -d
可以看到,此时就是安全的连接了,大功告成!
配置自动续期
Let’s Encrypt 的证书有效期为 90 天,因此需要配置自动续期。
编辑定时任务:
Bash
sudo crontab -e
添加以下行,每月自动续期并重启 Nginx:
Bash
0 0 1 * * certbot renew --quiet