单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
相关产品推荐
相关产品推荐

