apache虚拟主机本质是按请求特征做路由分发,依赖host请求头匹配servername/serveralias,将同一ip的请求精准分发至不同documentroot;分为基于域名(主流,省ip)和基于ip(需多地址)两类,匹配遵循ip端口→首匹配→默认主机的确定性优先级。

Apache 虚拟主机的工作原理,本质是“**按请求特征做路由分发**”——它不靠多台机器,而是靠配置规则,让一台 Apache 实例识别不同访问意图,并把请求精准交给对应的网站目录和配置处理。
核心依赖:HTTP 请求头里的 Host 字段
现代虚拟主机(尤其是最常用的基于域名的方式)完全依赖客户端在 HTTP/1.1 及以上协议中主动发送的 Host 请求头。比如你访问 www.a.com,浏览器发出的请求里就包含:
GET /index.html HTTP/1.1<br>Host: www.a.com
Apache 收到后,立即检查这个 Host 值,然后逐条比对配置文件中所有 <virtualhost></virtualhost> 块的 ServerName 或 ServerAlias,匹配成功就启用该虚拟主机的全部设定(文档根目录、日志路径、模块开关等)。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
两种主流实现方式的区别
- 基于域名(Name-based):同一 IP、同一端口,全靠 Host 头区分。部署简单、IP 节省,95% 的生产环境都用这种方式。
-
基于 IP(IP-based):服务器绑定多个 IP(如
192.168.1.10和192.168.1.11),每个<virtualhost></virtualhost>独立对应一个站点。无需依赖 Host 头,兼容性更强,但需要额外 IP 资源,现在较少使用。
匹配过程不是“模糊查找”,而是有明确优先级
Apache 不是随便挑一个匹配的配置,它有一套确定性规则:
- 先看请求的目标 IP 和端口,锁定候选的
<virtualhost></virtualhost>块范围; - 再在这些块中,按顺序检查
ServerName和ServerAlias,取第一个完全匹配 Host 头的; - 如果都没匹配上,就交给配置文件里第一个定义的
<virtualhost></virtualhost>(即默认虚拟主机)处理。
它不是独立进程,而是配置层面的逻辑隔离
所有虚拟主机共用同一个 httpd 进程和系统资源(CPU、内存、连接数)。它们之间的“独立”体现在:
- 各自拥有独立的
DocumentRoot目录; - 可设置不同的访问日志(
ErrorLog/CustomLog); - 能启用/禁用不同模块(如仅对某站开
mod_rewrite); - 支持单独的 SSL 配置(配合 SNI 技术,一个 IP 也能配多个 HTTPS 站点)。









