从宝塔反向代理到 Docker 直连:新手进阶与企业架构思考
(附多项目多域名场景下的 Docker 方案解析)
一、背景与现状
我之前一直用「Docker + 宝塔反向代理」部署项目:
- Docker 容器跑在
8081端口,项目本身运行正常(IP:8081可访问) - 宝塔 Nginx 做反向代理,把域名请求转发到
127.0.0.1:8081 - 一旦停掉宝塔 Nginx,域名就无法访问,本质是「公网入口」的桥断了
现在我想尝试进阶方案:让 Docker Nginx 直接监听 80 端口,摆脱对宝塔反向代理的依赖,同时也好奇:
- 这种方案下域名该如何绑定?
- 企业里真的会用「宝塔 → 反向代理 → Docker」这种多层架构吗?
- 如果一台服务器要跑多个项目、多个域名,直接解析 IP 的方式还够用吗?
二、核心认知:Docker 直连 80 端口的域名绑定逻辑
1. 单项目单域名:域名只需要解析 IP
当 Docker Nginx 映射端口为 80:80 时,它直接接管服务器的 80 端口(HTTP 默认端口),此时域名绑定不需要在 Docker 里做任何配置:
- 只需要把域名的 A 记录解析到服务器公网 IP
- 浏览器访问域名时,默认请求 80 端口,流量直接进入 Docker Nginx,最终到达项目
- 流程:
用户 → 域名 → 服务器 80 端口 → Docker Nginx → 项目 - 完全不需要宝塔、不需要反向代理,链路更短、更稳定
2. 企业真实架构:不会用宝塔反向代理
中大型企业的服务器几乎不会安装宝塔面板,也不会用「宝塔 → 反向代理 → Docker」的多层架构,原因很简单:
- 多层架构 = 多故障点,任何一层出问题都会导致服务不可用
- Docker 本身就是企业级环境标准化的解决方案,不需要宝塔辅助
- 标准架构是:
用户请求 → Docker Nginx → 项目,干净、高效、易维护
我之前用的「宝塔反向代理 + Docker」本质是新手过渡方案,适合从宝塔转 Docker 的学习阶段,而非生产环境。
三、关键疑问:多项目多域名场景下,Docker 该如何处理?
你问得非常关键:如果一台服务器要跑多个项目、绑定多个域名,直接解析 IP 的方式确实不够用,这时候需要靠「Docker Nginx 虚拟主机」来解决。
1. 核心原理:Nginx 虚拟主机(Server Block)
Nginx 支持通过「虚拟主机」功能,在同一个 80/443 端口下,根据请求的域名,转发到不同的 Docker 服务或项目目录:
- 多个域名 → 都解析到同一台服务器 IP
- Docker Nginx 监听 80 端口,根据
server_name匹配不同域名 - 不同域名的请求,转发到对应的 Docker 容器或静态资源目录
2. 示例配置(Nginx 虚拟主机)
假设服务器要跑两个项目:
- 项目 A:域名
project-a.com,对应 Docker 容器project-a-nginx(内部端口 80) - 项目 B:域名
project-b.com,对应 Docker 容器project-b-nginx(内部端口 80)
在 Docker Nginx 的配置文件中,添加两个 server 块:
nginx
# 项目 A:处理 project-a.com 请求
server {
listen 80;
server_name project-a.com; # 匹配域名 A
location / {
proxy_pass http://project-a-nginx:80; # 转发到项目 A 的 Docker 容器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 项目 B:处理 project-b.com 请求
server {
listen 80;
server_name project-b.com; # 匹配域名 B
location / {
proxy_pass http://project-b-nginx:80; # 转发到项目 B 的 Docker 容器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 多项目多域名的完整流程
- 所有域名(
project-a.com、project-b.com)都解析到服务器公网 IP - 启动多个 Docker 服务(每个项目一个 Nginx 容器),容器间通过 Docker 网络互通
- 主 Docker Nginx 监听 80 端口,加载上面的虚拟主机配置
- 用户访问不同域名时,Nginx 根据
server_name自动转发到对应项目的容器 - 实现「一台服务器、多个项目、多个域名」同时运行,互不干扰
四、两种方案对比:新手过渡 vs 企业标准
表格
| 方案 | 架构 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 宝塔反向代理 + Docker | 域名 → 宝塔 Nginx → Docker | 上手简单、保留宝塔操作习惯 | 多层架构、故障点多、依赖宝塔 | 个人学习、新手过渡 |
| Docker 直连 80 + 虚拟主机 | 域名 → Docker Nginx → 各项目容器 | 链路短、稳定、企业标准、支持多域名 | 需要学习 Nginx 配置 | 生产环境、企业开发 |
五、总结与后续学习建议
- 单项目场景:直接用 Docker 映射
80:80,域名解析到服务器 IP 即可,完全摆脱宝塔 - 多项目场景:通过 Docker Nginx 虚拟主机,实现多域名多项目共存,这是企业级开发的标准方案
- 认知升级:「宝塔反向代理」是过渡手段,Docker + Nginx 虚拟主机才是真正的生产级架构,也是后续学习的重点
六、后记
从依赖宝塔的「傻瓜式部署」,到理解 Docker 直连、虚拟主机的「工程化部署」,本质是从「会用工具」到「懂架构」的进阶。多项目多域名的场景看似复杂,核心就是 Nginx 虚拟主机的应用,掌握这一点,就能应对绝大多数企业级部署需求。