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