ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 基于IP地址的虚拟主机 ## 系统需求 就像它的名字"&lt;cite class="calibre27"&gt;基于IP&lt;/cite&gt;"所暗示的那样,这样的服务器中**每个基于IP的虚拟主机必须拥有不同的IP地址**。可以通过配备多个真实的物理网络接口来达到这一要求,也可以使用几乎所有流行的操作系统都支持的虚拟界面来达到这一要求(详情请参见您的系统文档,这种功能一般被称作"IP别名",一般用"ifconfig"命令来进行设置)。 ## 如何配置Apache 有两种配置方法来使apache支持多主机:为每个虚拟主机运行不同的`httpd`守护进程;或者用同一个守护进程来支持所有虚拟主机。 以下情况使用多个守护进程: * 出于安全的考虑,比如说公司甲不希望公司乙的任何人能用除web以外的方式访问到他们的数据。在这种情况下,您需要启动两个守护进程。每个进程都使用不同的`User`, `Group`, `Listen`, `ServerRoot`设置。 * 您能够为机器上的每个IP地址提供内存和文件描述符需求。您只能`Listen`一个"通配符型"地址或一个特定的地址。所以不管出于什么原因,如果您需要侦听一个特定的地址,您就必须同时侦听所有特定的地址。(尽管可以让一个`httpd`侦听N-1个地址,而让另一个侦听剩下的地址) 以下情况使用单一守护进程: * httpd的配置可以为多个虚拟主机共享而不引起麻烦。 * 机器要接受大量的访问请求,从而多启动一个守护进程会导致性能大幅度降低。 ## 设置多个守护进程 为每个虚拟主机创建一个不同的`httpd`安装。每次安装都在配置文件中使用`Listen`指令指定守护进程伺服的IP地址(或虚拟主机)。比如: ``` Listen www.smallco.com:80 ``` 建议您使用IP地址来取代域名(理由请参见关于[DNS和Apache](#calibre_link-55))。 ## 配置拥有多个虚拟主机的单一守护进程 在这种情况下,单一的`httpd`将伺服所有对主服务器和虚拟主机的请求。而配置文件中的`VirtualHost`指令将为每个虚拟主机配置不同的`ServerAdmin`, `ServerName`, `DocumentRoot`, `ErrorLog`, `TransferLog`, `CustomLog` 。例如: ``` <VirtualHost www.smallco.com> ServerAdmin webmaster@mail.smallco.com DocumentRoot /groups/smallco/www ServerName www.smallco.com ErrorLog /groups/smallco/logs/error_log TransferLog /groups/smallco/logs/access_log </VirtualHost> <VirtualHost www.baygroup.org> ServerAdmin webmaster@mail.baygroup.org DocumentRoot /groups/baygroup/www ServerName www.baygroup.org ErrorLog /groups/baygroup/logs/error_log TransferLog /groups/baygroup/logs/access_log </VirtualHost> ``` 建议您使用IP地址来取代域名(理由请参见关于[DNS和Apache](#calibre_link-55))。 除了创建进程的指令和其他一些指令外,几乎**所有的**配置指令都能用于`<VirtualHost>`指令中。您可以使用[指令索引](#calibre_link-2)在[作用域](#calibre_link-20)中查询一个指令是否可以用于`<VirtualHost>`指令。 如果使用了[suEXEC包装](#calibre_link-230),那么`SuexecUserGroup`指令也可以在`<VirtualHost>`段中使用。 _安全警示_:当指定日志文件时,请记住有安全风险。一些别有用心的人会在那个目录拥有写权限。请参见[安全方面的提示](#calibre_link-263)获取详情。