返回
Docker 环境中使用 Nginx 和 ACME,轻松部署证书
后端
2023-10-11 08:14:06
前言:SSL 证书的重要性
在当今互联网世界中,安全是重中之重。SSL(安全套接字层)证书扮演着至关重要的角色,它可以对在客户端和服务器之间传输的数据进行加密,保护信息免遭窃取和篡改。通过使用 SSL 证书,你可以向你的网站访问者传达安全和信任的信号,同时确保你的网站符合行业标准和法规要求。
准备工作
在开始之前,确保你已经拥有以下环境:
- Docker:一个轻量级的容器化平台,用于在本地或云端运行应用程序。
- Docker Compose:一个用来定义和管理多容器 Docker 应用的工具。
- Nginx:一个流行的开源 Web 服务器,作为反向代理,负责处理 SSL 证书并提供安全连接。
- ACME 客户端:一个命令行工具,可以从 Let's Encrypt 颁发机构获取免费的 SSL 证书。
第一步:设置 Docker 环境
安装并配置好 Docker 和 Docker Compose 后,创建一个目录来保存你的程序运行相关的文件。例如,在 /opt/nginx-acme
目录下创建以下文件结构:
├── docker-compose.yml
├── nginx
│ ├── nginx.conf
│ ├── sites-available
│ │ └── example.com
│ └── sites-enabled
└── acme.sh
第二步:配置 Nginx
接下来,配置 Nginx 作为反向代理服务器。在 /nginx/nginx.conf
文件中添加以下配置:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;
location / {
proxy_pass http://localhost:80;
}
}
记得替换 example.com
为你的实际域名。
第三步:安装 ACME 客户端
使用以下命令安装 ACME 客户端:
curl https://get.acme.sh | sh
第四步:获取并部署 SSL 证书
执行以下命令获取 SSL 证书:
acme.sh --issue -d example.com --webroot /nginx/acme.sh
这将为你颁发一个免费的 SSL 证书并将其部署到 /etc/letsencrypt/live/example.com
目录。
第五步:配置 Docker Compose
创建 /docker-compose.yml
文件,并添加以下内容:
version: '3.7'
services:
nginx:
image: nginx:latest
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/sites-available:/etc/nginx/sites-available
- ./nginx/sites-enabled:/etc/nginx/sites-enabled
- ./nginx/acme.sh:/acme.sh
ports:
- "80:80"
- "443:443"
app:
image: your-app-image
ports:
- "80:80"
记得替换 your-app-image
为你的应用程序镜像。
第六步:运行 Docker Compose
执行以下命令运行 Docker Compose:
docker-compose up -d
第七步:测试 SSL 证书
在浏览器中访问你的网站,确保可以看到安全锁图标,并确认你的网站已启用 HTTPS。
结语
通过使用 Docker、Nginx 和 ACME,你已经成功地在 Docker 环境中快速部署了 SSL 证书。现在,你的网站或应用程序将受到 SSL 证书的保护,为用户提供安全可靠的访问环境。