《Docker 容器配置 SSL:基于 Nginx 镜像实现 HTTPS 服务》
·
Docker 容器配置 SSL:基于 Nginx 镜像实现 HTTPS 服务
核心原理
HTTPS 服务需完成以下关键步骤:
- 获取 SSL 证书(含公钥和私钥)
- 配置 Nginx 监听 443 端口并启用 SSL
- 将证书挂载到容器内
- 设置 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
验证配置
-
HTTP 访问测试:
curl -I http://localhost应返回
301 Moved Permanently重定向 -
HTTPS 访问测试:
curl -k https://localhost # -k 忽略证书警告应返回 Nginx 默认欢迎页
-
容器日志检查:
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 301 | HTTP 到 HTTPS 重定向 | https://$host$request_uri |
生产环境优化建议
-
证书管理:
- 使用 Let's Encrypt 自动续签证书
- 通过 Docker Secrets 管理私钥
-
安全加固:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; -
性能优化:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 24h;
注:自签名证书会触发浏览器警告,生产环境需使用可信 CA 签发证书。通过挂载卷实现证书动态更新,无需重建容器。
更多推荐
所有评论(0)