# 34.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"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.bsdcn.org/hanbook/di-34-zhang-gao-ji-wang-luo/34.3.-xu-ni-zhu-ji.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
