Skip to main content

Docker Nginx容器部署SSL证书教程:容器化HTTPS配置

· 4 min read
OHTTPS

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. 创建部署节点​

  1. 登录OHTTPS平台
  2. 进入"部署节点"页面
  3. 点击"创建部署节点"
  4. 选择"Docker" → "Nginx"

2. 配置部署信息​

  1. 输入容器名称
  2. 输入证书挂载路径
  3. 配置重启命令
  4. 测试连接

3. 关联证书​

  1. 选择要部署的证书
  2. 选择部署节点
  3. 启用自动部署
  4. 证书更新后自动部署到容器

六、证书自动更新​

1. 使用OHTTPS自动更新​

  1. 在证书配置中启用自动更新
  2. 配置自动部署到Docker容器
  3. 证书更新后自动重启容器

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访问​

  1. 访问 https://your-domain.com
  2. 检查浏览器地址栏锁图标
  3. 确认证书信息正确

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证书的一站式申请、更新、部署、监控和管理。