Docker容器化部署是现代应用部署的常见方式,在Docker Nginx容器中部署SSL证书需要特殊的配置方法。本文将详细介绍如何在Docker Nginx容器中部署SSL证书,包括证书挂载、配置文件和自动更新。
一、准备工作
1. 获取SSL证书
在部署前,您需要:
- 已申请SSL证书(从OHTTPS、Let's Encrypt等)
- 证书文件(.crt或.pem)
- 私钥文件(.key)
- 证书链文件(可选但推荐)
2. Docker环境准备
- 已安装Docker
- 已拉取Nginx镜像
- 了解Docker基本操作
二、证书文件准备
1. 创建证书目录
mkdir -p /path/to/ssl
2. 复制证书文件
# 复制证书文件
cp certificate.crt /path/to/ssl/
cp private.key /path/to/ssl/
cp chain.crt /path/to/ssl/
3. 设置文件权限
chmod 644 /path/to/ssl/certificate.crt
chmod 600 /path/to/ssl/private.key
chmod 644 /path/to/ssl/chain.crt
三、Nginx配置文件
1. 创建Nginx配置
创建 nginx.conf 文件:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
ssl_trusted_certificate /etc/nginx/ssl/chain.crt;
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';
ssl_prefer_server_ciphers off;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
2. 创建Dockerfile(可选)
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY ssl/ /etc/nginx/ssl/
EXPOSE 80 443
四、运行Docker容器
1. 使用docker run
docker run -d \
--name nginx-ssl \
-p 80:80 \
-p 443:443 \
-v /path/to/ssl:/etc/nginx/ssl:ro \
-v /path/to/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
nginx:alpine
2. 使用docker-compose
创建 docker-compose.yml 文件:
version: '3'
services:
nginx:
image: nginx:alpine
container_name: nginx-ssl
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl:/etc/nginx/ssl:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
restart: unless-stopped
运行容器:
docker-compose up -d
五、使用OHTTPS自动部署
1. 创建部署节点
- 登录OHTTPS平台
- 进入"部署节点"页面
- 点击"创建部署节点"
- 选择"Docker" → "Nginx"
2. 配置部署信息
- 输入容器名称
- 输入证书挂载路径
- 配置重启命令
- 测试连接
3. 关联证书
- 选择要部署的证书
- 选择部署节点
- 启用自动部署
- 证书更新后自动部署到容器
六、证书自动更新
1. 使用OHTTPS自动更新
- 在证书配置中启用自动更新
- 配置自动部署到Docker容器
- 证书更新后自动重启容器
2. 使用脚本自动更新
创建更新脚本 update-cert.sh:
#!/bin/bash
# 下载新证书
# ... 下载证书逻辑 ...
# 复制证书文件
cp new_certificate.crt /path/to/ssl/certificate.crt
cp new_private.key /path/to/ssl/private.key
# 重启容器
docker restart nginx-ssl
七、验证配置
1. 检查容器状态
docker ps | grep nginx-ssl
2. 检查HTTPS访问
- 访问 https://your-domain.com
- 检查浏览器地址栏锁图标
- 确认证书信息正确
3. 查看容器日志
docker logs nginx-ssl
八、常见问题
1. 证书文件权限问题
问题:容器无法读取证书文件
解决方法:
- 检查文件权限
- 使用
:ro只读挂载 - 确保文件所有者正确
2. 证书更新后不生效
问题:更新证书后容器仍使用旧证书
解决方法:
- 重启容器
- 检查证书文件是否正确更新
- 使用OHTTPS自动部署
3. 端口冲突
问题:80或443端口被占用
解决方法:
- 检查端口占用
- 修改端口映射
- 停止冲突的服务
九、最佳实践
1. 证书管理
- ✅ 使用OHTTPS自动部署
- ✅ 定期备份证书文件
- ✅ 监控证书到期时间
2. 容器配置
- ✅ 使用只读挂载
- ✅ 配置自动重启
- ✅ 使用健康检查
3. 安全配置
- ✅ 使用强加密协议
- ✅ 配置安全响应头
- ✅ 限制容器权限
总结
在Docker Nginx容器中部署SSL证书需要正确挂载证书文件和配置Nginx。通过本文的指导,您可以快速部署SSL证书并启用HTTPS。
关键要点:
- ✅ 挂载证书文件到容器
- ✅ 配置Nginx SSL
- ✅ 使用OHTTPS自动部署
- ✅ 配置证书自动更新
如果您需要申请SSL证书,推荐使用OHTTPS平台,它提供了自动部署到Docker容器的功能,让证书管理变得简单高效。
OHTTPS: 免费HTTPS证书/SSL证书申请 • 自动化更新、部署、监控
OHTTPS 支持通过多种域名验证方式(DNS验证、HTTP验证、文件验证等)申请免费的HTTPS证书/SSL证书,包括单域名证书、多域名证书、通配符证书、IP证书等,支持HTTPS证书/SSL证书的自动化更新、自动化部署、自动化监控及告警等,并支持将HTTPS证书/SSL证书自动化部署至阿里云、腾讯云、群晖NAS、百度云、七牛云、多吉云、又拍云、宝塔面板、Docker容器、SSH等,实现HTTPS证书/SSL证书的一站式申请、更新、部署、监控和管理。