Apache怎么配置虚拟主机 Apache多域名指向不同目录详解

冬明大大_7285

冬明大大_7285

2026-05-20

987人浏览

原创

virtualhost配置失败主因是权限不足、vhost_alias模块未启用或host头未识别,而非配置未加载;需确认模块启用、directory权限放行、所有vhost监听一致端口,并用apache2ctl -s验证及hosts文件解析域名。

apache怎么配置虚拟主机 apache多域名指向不同目录详解

VirtualHost 配置本身不难,但多数人卡在权限、模块启用或 Host 头未被识别这三处,直接导致 403 或 500 错误,而不是“没生效”。

确认 vhost_alias 模块已启用且 NameVirtualHost 已弃用

Apache 2.4+ 不再需要 NameVirtualHost 指令,它已被自动隐含支持。但很多人仍从旧文档复制这一行,反而引发语法错误(Syntax error on line X of httpd.conf: NameVirtualHost takes one argument...)。检查是否启用虚拟主机核心模块才是关键:

  • Ubuntu/Debian:sudo a2enmod vhost_alias + sudo systemctl restart apache2
  • CentOS/RHEL:grep -E "^(LoadModule|Include)" /etc/httpd/conf/httpd.conf | grep -i vhost,确保 LoadModule vhost_alias_module modules/mod_vhost_alias.so 未被注释
  • 运行 apache2ctl -M | grep vhost(或 httpd -M | grep vhost),看到 vhost_alias_module 表示模块就位

DocumentRoot 目录权限和 <directory></directory> 块必须显式放行

即使配置文件语法全对,DocumentRoot 目录若没给 Apache 进程读取权限,就会返回 403 Forbidden。这不是“配置没加载”,而是系统级访问拒绝。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 目录属主建议设为 www-data:www-data(Ubuntu)或 apache:apache(CentOS),而非 root 或当前用户
  • <directory></directory> 块不能省略,且必须包含 Require all granted(Apache 2.4)或 Order allow,deny && Allow from all(2.2,已淘汰)
  • 不要依赖全局 <directory></directory> 放行 —— 它会被更具体的 <directory></directory> 覆盖,而虚拟主机里没写就等于默认拒绝

多个 VirtualHost 块共存时,监听地址和端口必须一致才触发域名匹配

如果一个 VirtualHost *:80,另一个写成 VirtualHost 192.168.1.100:80,Apache 会优先匹配 IP 精确匹配的那一个,其余请求全落到第一个(或默认站点),ServerName 就失效了。

  • 所有基于名称的虚拟主机必须使用相同监听组合,例如统一用 *:80 或 *:443
  • 检查 Listen 指令是否覆盖:比如只写了 Listen 8080,却配了 *:80 的 VirtualHost,那整个配置根本不会响应 80 端口请求
  • 用 sudo apache2ctl -S(或 httpd -S)查看实际加载的虚拟主机列表和匹配顺序 —— 这是唯一能验证配置是否被识别、是否冲突的命令

HTTP Host 头未发送?本地测试要改 /etc/hosts,别靠浏览器地址栏直输 IP

浏览器访问 http://192.168.1.100 时,HTTP 请求头里没有 Host: example.com,Apache 只能走默认虚拟主机(通常是第一个定义的),跟 ServerName 无关。

  • 本地测试前,必须在客户端机器(包括服务器本机)的 /etc/hosts 加一行:192.168.1.100 example.com test.com
  • 然后访问 http://example.com,才能让请求带上正确的 Host 头,触发域名路由
  • 用 curl -H "Host: example.com" http://192.168.1.100/ 可临时验证配置是否生效,绕过 DNS 和 hosts
真实部署中,最常被跳过的其实是 apache2ctl -S 输出检查和 /etc/hosts 本地解析 —— 其他都写对了,就差这两步,结果反复重启服务、怀疑配置语法、重装模块,纯属白费功夫。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux apache

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习