You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单IP Linux服务器部署多域名HTTPS站点方案咨询

单IP Linux服务器用Docker+Nginx反向代理部署多HTTPS站点方案

1. 基础环境准备

  • 安装Docker与Docker Compose:
    # 一键安装Docker
    curl -fsSL https://get.docker.com | sh
    # 安装Docker Compose(以v2.20.2版本为例)
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  • 开放HTTP/HTTPS端口(以ufw防火墙为例):
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw reload
    

2. 部署带自动HTTPS的Nginx反向代理

目录结构搭建

创建如下目录结构统一管理配置与证书:

nginx-proxy/
├── docker-compose.yml
├── nginx/
│   ├── conf.d/
│   └── vhost.d/
└── certs/

编写Docker Compose配置

在nginx-proxy/docker-compose.yml中写入:

version: '3.8'
services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/vhost.d:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always

  certbot-companion:
    image: nginxproxy/acme-companion
    volumes:
      - ./certs:/etc/nginx/certs
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - DEFAULT_EMAIL=your-email@example.com # 替换为你的邮箱,用于证书过期通知
      - NGINX_PROXY_CONTAINER=nginx-proxy_nginx-proxy_1 # 启动后可通过docker ps确认容器名
    restart: always
    depends_on:
      - nginx-proxy

启动反向代理服务

cd nginx-proxy
docker-compose up -d

3. 部署多站点/服务容器

所有站点只需通过环境变量指定域名,即可自动接入反向代理并获取HTTPS证书,以下是两个示例:

示例1:静态HTML站点

创建static-site/docker-compose.yml:

version: '3.8'
services:
  static-site:
    image: nginx:alpine
    volumes:
      - ./html:/usr/share/nginx/html # 挂载本地HTML文件目录
    environment:
      - VIRTUAL_HOST=site1.yourdomain.com # 替换为你的站点域名
      - LETSENCRYPT_HOST=site1.yourdomain.com
    restart: always

创建html/index.html写入测试内容,执行docker-compose up -d启动。

示例2:Node.js API服务

假设已有Node.js服务镜像your-node-api:latest,创建node-api/docker-compose.yml:

version: '3.8'
services:
  node-api:
    image: your-node-api:latest
    environment:
      - VIRTUAL_HOST=api.yourdomain.com # 替换为你的API域名
      - LETSENCRYPT_HOST=api.yourdomain.com
    restart: always

执行docker-compose up -d启动服务。

4. 核心配置说明

  • VIRTUAL_HOST:指定站点域名,Nginx代理会根据该域名将请求转发至对应容器
  • LETSENCRYPT_HOST:告知Certbot为该域名自动申请并续期SSL证书
  • 跨Compose项目的容器需加入同一Docker网络,可在每个docker-compose.yml中添加networks字段指定共享网络

5. 验证与维护

  • 访问各个域名,确认HTTPS正常生效(浏览器地址栏显示锁标)
  • 查看证书状态:进入nginx-proxy容器执行certbot certificates
  • 定期更新镜像:执行docker-compose pull && docker-compose up -d更新代理及站点容器

内容的提问来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:42:23