Docker 部署 Nginx 并启用 HTTPS 的完整流程

环境准备
确保已安装 Docker 和 Docker Compose。可通过以下命令验证版本:

docker --version
docker-compose --version

创建项目目录结构
新建一个项目目录,包含以下子目录和文件:

/nginx-docker
  ├── docker-compose.yml
  ├── nginx/
  │   ├── nginx.conf
  │   ├── conf.d/
  │   │   └── default.conf
  │   └── ssl/
  │       ├── cert.pem
  │       └── cert.key
  └── html/
      └── index.html

生成 SSL 证书
使用 OpenSSL 生成自签名证书(生产环境建议使用 Let's Encrypt):

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout nginx/ssl/cert.key -out nginx/ssl/cert.pem

配置 Nginx 配置文件
编辑 nginx/conf.d/default.conf 启用 HTTPS:

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/cert.key;

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

server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

编写 Docker Compose 文件
docker-compose.yml 内容示例:

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/nginx/ssl
      - ./html:/usr/share/nginx/html
    restart: always

启动容器
运行以下命令启动服务:

docker-compose up -d

验证部署
访问 https://localhost 应看到 Nginx 默认页面或自定义的 index.html。浏览器会提示证书不安全(自签名证书正常现象),高级选项中继续访问即可。

生产环境优化建议

  • 使用 Let's Encrypt 的 certbot 获取受信任证书
  • nginx.conf 中配置 TLS 1.2/1.3 和加密套件
  • 启用 OCSP Stapling 提升性能
  • 通过 docker logs <container_id> 监控日志

证书自动续期方案
对于 Let's Encrypt 证书,可通过 cron 任务定期执行:

docker run --rm --name certbot \
  -v "/path/to/certs:/etc/letsencrypt" \
  certbot/certbot renew

更多推荐