> For the complete documentation index, see [llms.txt](https://handbook.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://handbook.bsdcn.org/di-35-zhang-gao-ji-wang-luo/35.3.-xu-ni-zhu-ji.md).

# 35.3.虚拟主机

FreeBSD 的常见用途之一是虚拟站点托管，其中一台服务器在网络中表现为多个服务器。这是通过将多个网络地址分配给单个接口来实现的。

网络接口有一个“真实”地址，并且可以拥有任意数量的“别名”地址。这些别名通常通过在 **/etc/rc.conf** 中添加别名条目来实现，如下所示：

```sh
# sysrc ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
```

别名条目必须以 `alias0` 开头，使用递增的数字，如 `alias0`、`alias1`，依此类推。配置过程将在第一个缺失的数字处停止。

别名子网掩码的计算非常重要。对于给定的接口，必须有一个地址，其子网掩码能正确表示网络。任何其他属于该网络的地址必须使用全 `1` 的子网掩码，表示为 `255.255.255.255` 或 `0xffffffff`。

例如，考虑以下情况：`fxp0` 接口连接到两个网络：**10.1.1.0**，子网掩码为 `255.255.255.0`，以及 **202.0.75.16**，子网掩码为 `255.255.255.240`。系统需要配置为在范围 **10.1.1.1** 到 **10.1.1.5** 和 **202.0.75.17** 到 **202.0.75.20** 中出现。只有给定网络范围中的第一个地址应具有实际的子网掩码。其余地址（**10.1.1.2** 到 **10.1.1.5** 和 **202.0.75.18** 到 **202.0.75.20**）必须配置为子网掩码为 `255.255.255.255`。

以下 **/etc/rc.conf** 条目为该场景正确配置适配器：

```sh
# sysrc ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
# sysrc ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
# sysrc ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
# sysrc ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
# sysrc ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
# sysrc ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
# sysrc ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
# sysrc ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
# sysrc ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"
```

更简洁的方式是使用以空格分隔的 IP 地址范围。第一个地址将使用指定的子网掩码，而额外的地址将使用子网掩码 `255.255.255.255`。

```sh
# sysrc ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
```
