Docker 容器配置 SSL:基于 Nginx 镜像实现 HTTPS 服务

核心原理

HTTPS 服务需完成以下关键步骤:

  1. 获取 SSL 证书(含公钥和私钥)
  2. 配置 Nginx 监听 443 端口并启用 SSL
  3. 将证书挂载到容器内
  4. 设置 HTTP 到 HTTPS 的重定向

详细步骤
1. 准备证书文件
  • 创建证书目录并生成测试证书(生产环境需替换为正式证书):
mkdir ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout ssl/server.key -out ssl/server.crt \
  -subj "/CN=localhost"

生成文件:

  • server.key:私钥文件
  • server.crt:自签名证书
2. 创建 Nginx 配置文件

新建 nginx.conf

events {
    worker_connections  1024;
}

http {
    server {
        listen 80;
        server_name localhost;
        return 301 https://$host$request_uri;  # HTTP 重定向到 HTTPS
    }

    server {
        listen 443 ssl;
        server_name localhost;

        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;

        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

3. 创建 Dockerfile
FROM nginx:alpine

# 删除默认配置
RUN rm /etc/nginx/conf.d/default.conf

# 复制自定义配置
COPY nginx.conf /etc/nginx/nginx.conf

# 创建证书目录
RUN mkdir -p /etc/nginx/ssl

# 暴露端口
EXPOSE 80 443

4. 构建并运行容器
# 构建镜像
docker build -t nginx-https .

# 运行容器(挂载证书目录)
docker run -d \
  -p 80:80 \
  -p 443:443 \
  -v $(pwd)/ssl:/etc/nginx/ssl \
  --name https-server \
  nginx-https


验证配置
  1. HTTP 访问测试

    curl -I http://localhost
    

    应返回 301 Moved Permanently 重定向

  2. HTTPS 访问测试

    curl -k https://localhost  # -k 忽略证书警告
    

    应返回 Nginx 默认欢迎页

  3. 容器日志检查

    docker logs https-server
    

    确认无 SSL 相关错误


关键配置说明
配置项作用示例值
listen 443 ssl启用 SSL 监听必填
ssl_certificate证书文件路径/etc/nginx/ssl/server.crt
ssl_certificate_key私钥文件路径/etc/nginx/ssl/server.key
return 301HTTP 到 HTTPS 重定向https://$host$request_uri

生产环境优化建议
  1. 证书管理

    • 使用 Let's Encrypt 自动续签证书
    • 通过 Docker Secrets 管理私钥
  2. 安全加固

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    

  3. 性能优化

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 24h;
    

注:自签名证书会触发浏览器警告,生产环境需使用可信 CA 签发证书。通过挂载卷实现证书动态更新,无需重建容器。

更多推荐