用华为云VPC给应用规划"Web层+数据层"双子网隔离架构
一、背景:单台机器的隐患
如果你有一台 ECS 把后端、前端、甚至数据库全堆在一个网络里,能跑,但有隐患:
- 一旦这台机器被攻破,数据库和应用一起裸奔。
- 数据库端口(比如 3306/6379)如果因为图省事开着公网访问,等于把家门钥匙挂门口。
所以这一篇我用 VPC(虚拟私有云) 给项目做一次"网络分层":把能对外提供服务的 Web 层,和只对内通信的数据层,拆进不同的子网,再用安全组卡死跨层访问。这个思路不止适用于待办应用,任何"有数据库"的云上项目都该这么想。
二、先搞清楚 VPC 里几个角色
刚开始看 VPC 控制台容易懵,其实就四样东西:
- VPC:一块逻辑隔离的私有网络空间,你在里面随便划 IP 段(比如
192.168.0.0/16)。 - 子网(Subnet):VPC 里再切的小网段,必须落在 VPC 的网段内,且每个子网绑定一个可用区。
- 安全组(Security Group):作用在网卡上的"状态化防火墙",控制进出流量。
- 路由表(Route Table):决定子网里的流量往哪走(比如去公网要经过 EIP / NAT 网关)。
一句话记忆:VPC 是院子,子网是房间,安全组是门禁,路由表是出门的路。
三、动手:建一个 VPC + 两个子网
我在控制台新建了一个 VPC,网段 192.168.0.0/16,然后在里面开了两个子网:
| 子网名称 | 网段 | 可用区 | 放什么 |
|---|---|---|---|
| web-subnet | 192.168.0.0/24 | 可用区一 | 前端 + 后端 Web 服务 |
| data-subnet | 192.168.1.0/24 | 可用区一 | 数据库 / 缓存 |
注意子网网段要在 VPC 网段内、且互相不重叠。我一开始把 data 也写成
192.168.0.0/24,创建直接报错,改成192.168.1.0/24才过。
然后把 Web 层的 ECS 放到 web-subnet,后面要加的数据库实例就规划进 data-subnet。

四、安全组分层:数据层绝不对外
这是整套设计的核心。我建了两个安全组:
web-sg(Web 层):
| 方向 | 协议/端口 | 来源 | 说明 |
|---|---|---|---|
| 入 | TCP 22 | 办公 IP | SSH,不放开给全网 |
| 入 | TCP 80/443 | 0.0.0.0/0 | 用户访问 Web |
| 出 | 全部 | 0.0.0.0/0 | 允许对外请求(拉镜像等) |
data-sg(数据层):
| 方向 | 协议/端口 | 来源 | 说明 |
|---|---|---|---|
| 入 | TCP 3306 | 仅 web-sg | 只让 Web 层访问数据库 |
| 入 | TCP 6379 | 仅 web-sg | 只让 Web 层访问缓存 |
| 出 | 全部 | 0.0.0.0/0 | 系统更新等 |
关键点:data-sg 的入方向来源填的是 web-sg 这个安全组 ID,而不是某个 IP。意思是"只有挂着 web-sg 的机器才能连我",这样即使以后 Web 层扩了好几台,也不用一个个加 IP。数据库端口彻底不碰公网,安全感直接拉满。
五、路由表:怎么让 Web 层能上公网
子网默认有个路由表,但默认只通 VPC 内部。Web 层要拉 Docker 镜像、做系统更新,得能出公网。做法有两种:
- 给 Web 层 ECS 绑 EIP(最简单,适合单台调试)。
- 公网出口统一走 NAT 网关,子网路由指向 NAT,数据层不绑 EIP 也能更新系统又不直接暴露——更规范,适合多实例。
如果你的项目还在单台调试阶段,方案 1 顶着就行;等后面做多实例、或者数据层也要更新系统又不想暴露,再补 NAT 网关。两者的本质区别就是"每台机器自带公网"还是"统一一个出口"。
六、单子网 vs 双子网,值不值?
| 对比项 | 单子网(全堆一起) | 双子网分层 |
|---|---|---|
| 配置复杂度 | 低 | 中 |
| 数据库暴露风险 | 高(易误开公网) | 低(安全组锁死) |
| 横向扩展 | 混在一起难管理 | 各层独立扩 |
| 合规审计 | 弱 | 强 |
说实话,个人小项目,单子网也能跑。但养成"数据层不外网"的习惯,等以后项目变正式、要过等保或客户审计时,就不会推倒重来。这也是我写这篇的初衷:把正确的云上姿势提前练熟。
七、小结
- 一个 VPC 兜底,Web 层和数据层各占一个子网;
- 安全组用"引用对方安全组 ID"的方式做分层放行,数据库端口零公网暴露;
- 出公网先用 EIP 顶着,后续再补 NAT 网关。
- 点赞
- 收藏
- 关注作者
评论(0)