基于名称的虚拟主机通过http请求头中的host字段将同一ip和端口的流量分发至不同网站目录,无需额外ip;需启用include和listen指令、配置virtualhost块、设置documentroot与directory权限、修改hosts文件映射域名并验证配置后重启服务。

配置基于名称的虚拟主机,核心是让同一 IP 和端口根据 HTTP 请求头中的 Host 字段,把流量分发到不同网站目录。不需要额外 IP,适合开发和大多数生产环境。
确认 Apache 已启用虚拟主机支持
打开主配置文件(如 /etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf),确保以下两行未被注释:
- Include conf/extra/httpd-vhosts.conf(或对应路径,指向虚拟主机配置文件)
- Listen 80(确保监听目标端口;如需 HTTPS,还需 Listen 443)
Apache 2.4+ 已废弃 NameVirtualHost 指令,只要存在
准备网站目录与基础页面
为每个域名建独立根目录,例如:
- /var/www/site-a → 放 index.html,内容写 “Site A”
- /var/www/site-b → 放 index.html,内容写 “Site B”
确保 Apache 进程有读取权限(Linux 下可执行:sudo chown -R $USER:www-data /var/www/site-*)。
编写虚拟主机配置
编辑 conf/extra/httpd-vhosts.conf(或你 Include 的那个文件),添加类似内容:
<virtualhost>
ServerName site-a.local
DocumentRoot "/var/www/site-a"
<directory>
Require all granted
</directory></virtualhost><virtualhost>
ServerName site-b.local
DocumentRoot "/var/www/site-b"
<directory>
Require all granted
</directory></virtualhost>
ServerName 必须与浏览器访问时输入的域名完全一致;如需支持带 www 的访问,加一行:ServerAlias www.site-a.local。
本地 DNS 映射与验证
仅限开发测试,修改系统 hosts 文件:
- Windows:C:\Windows\System32\drivers\etc\hosts
- macOS/Linux:/etc/hosts
添加:
127.0.0.1 site-a.local 127.0.0.1 site-b.local
保存后,用无痕窗口访问 http://site-a.local 和 http://site-b.local 测试。验证前先运行:sudo apachectl configtest(或 sudo apache2ctl configtest)检查语法,再重启服务:sudo systemctl restart apache2(或 sudo systemctl restart httpd)。











