基于IP的虚拟主机访问取决于Apache监听对应IP:端口并完成路由,以及安全组放行80/443端口且授权对象为0.0.0.0/0;安全组不识别虚拟主机逻辑,只管控网络层入站流量,与Apache配置无关。
基于 ip 的虚拟主机在云服务器上运行,关键在于:每个虚拟主机绑定一个独立公网 ip(或弹性 ip),而安全组规则需按实际监听的 ip 和端口来配置——但要注意,安全组本身不识别 apache 的虚拟主机逻辑,它只管控网络层的入站流量。
所以放行方式不是“为某个虚拟主机单独开规则”,而是确保这些 IP 对应的 HTTP/HTTPS 端口在安全组中被允许访问。
安全组中如何正确放行基于 IP 的虚拟主机端口
- 安全组规则是按 协议 + 端口 + 授权对象 设置的,与 Apache 配置的
<VirtualHost 192.168.1.100:80>无关,只关心该 IP 是否能收到来自外部的 80/443 流量。 - 阿里云 ECS 实例默认只有一个主网卡和一个主私有 IP,若要实现“基于不同公网 IP 的虚拟主机”,通常需:
- 为实例绑定多个弹性公网 IP(EIP);
- 并通过辅助网卡或 IP 别名(Secondary IP)将多个公网 IP 映射到不同内网 IP;
- 或者使用 NAT 网关 + 多 EIP 方案(更推荐用于生产)。
对应的安全组配置要点如下:
-
80 端口(HTTP)
- 协议类型:TCP
- 端口范围:80
- 授权对象:
0.0.0.0/0(开放给所有公网用户) - 说明:只要该端口在服务器上监听(如
Listen 80),且对应 IP 能接收流量,Apache 就会根据请求头中的 Host 字段路由到相应虚拟主机。
-
443 端口(HTTPS)
- 协议类型:TCP
- 端口范围:443
- 授权对象:
0.0.0.0/0 - 说明:同理,SSL/TLS 握手发生在应用层之前,安全组只需放行端口,证书和域名匹配由 Apache 自己处理。
-
22 端口(SSH)
- 协议类型:TCP
- 端口范围:22
- 授权对象:仅运维人员固定公网 IP,例如
203.208.60.1/32 - 说明:这是必须收紧的项。开放
0.0.0.0/0会导致高频暴力破解,日志中常见每小时数千次登录尝试。
-
不建议额外开放其他端口
- 比如不要为测试目的开放
8000、8080等非标端口给公网,除非业务强依赖且已做访问控制(如 Nginx 反向代理+鉴权)。
- 比如不要为测试目的开放
配合 Apache 的实际配置注意事项
-
Apache 中基于 IP 的虚拟主机写法示例:
<VirtualHost 192.168.1.100:80> ServerName site-a.example.com DocumentRoot /var/www/site-a </VirtualHost> <VirtualHost 192.168.1.101:80> ServerName site-b.example.com DocumentRoot /var/www/site-b </VirtualHost> 前提是:
192.168.1.100和192.168.1.101这两个 IP 必须真实配置在服务器网卡上(可用ip addr show验证);安全组无需区分这两个内网 IP —— 它们共享同一个公网出口,安全组只管“进来的流量是否允许抵达这台 ECS”,不管内部 Apache 怎么分发。
补充:如果用了多个弹性公网 IP(EIP)
- 阿里云支持为一个 ECS 实例绑定多个 EIP,但需配合辅助弹性网卡(ENI)或 IP 别名;
- 此时每个 EIP 可映射到不同内网 IP,安全组仍只需放行 80/443,因为:
- EIP 的流量最终都会转发到对应内网 IP;
- 安全组规则作用于整个实例,不区分 ENI 或子 IP。
⚠️ 注意:不要误以为“给 site-a 分配了 1.1.1.1,就该在安全组里只允许 1.1.1.1 访问 80”——这是错误理解。安全组没有“按目标 IP 过滤入站”的能力,它的“授权对象”字段指的是来源 IP,不是目标 IP。
总结一句话
基于 IP 的虚拟主机能否访问,取决于两点:
- Apache 是否监听对应 IP:端口,并完成路由;
- 安全组是否允许外部流量到达该实例的对应端口(80/443),且来源不受限(对 Web 服务而言,就是放行
0.0.0.0/0)。
其余细节,比如 IP 绑定、DNS 解析、证书配置,都不影响安全组本身的设置逻辑。


















