Apache虚拟机的核心搭建方法是修改httpd-vhosts.conf文件配置虚拟主机目录与域名,实现一台服务器托管多个网站,整个过程约需10分钟。
Apache虚拟机是什么
Apache虚拟机(Virtual Host)指的是一台物理服务器上同时运行多个独立网站的技术方案,每个网站拥有独立的域名、独立的根目录,互不干扰,用户在浏览器输入不同域名时,Apache会根据域名规则将请求转发到对应的网站目录。
对于个人站长、外包开发者以及小企业来说,Apache虚拟机是成本最低的多站点解决方案,省去了购买多台服务器的费用,也免去了频繁切换配置文件的麻烦,行业共识认为,Apache虚拟主机配置是Linux运维和PHP开发入门的必修技能。
Apache虚拟主机分为三种类型:
- 基于域名:通过不同域名区分站点,最常用
- 基于IP:通过不同IP地址区分站点,需要多网卡或多IP
- 基于端口:通过不同端口区分站点,适合测试环境
绝大多数场景下,我们使用的是基于域名的虚拟主机,下文也围绕这种类型展开。
Apache虚拟机怎么配置
配置Apache虚拟机并不复杂,核心就是改两个文件:httpd.conf和httpd-vhosts.conf,下面以Apache 2.4版本为例,环境为Windows和Linux通用操作步骤。
确认Apache版本和配置文件位置
配置文件通常在Apache安装目录下的conf文件夹中:
- Windows:
C:Apache24confhttpd.conf - Linux:
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf - macOS:
/etc/apache2/httpd.conf
打开httpd.conf,找到虚拟主机配置的引入语句:
Include conf/extra/httpd-vhosts.conf
如果这一行前面有注释符号,去掉它,保存,这一步的作用是让Apache在启动时加载虚拟主机的配置文件。
打开httpd-vhosts.conf
httpd-vhosts.conf是虚拟主机的核心配置文件,初始状态中,文件里有两段示例配置,为方便说明,我们全部清空,从头写一段。
配置第一个虚拟主机
假设你的服务器IP是168.1.10,第一个网站域名为www.example1.com,网站代码存放在/var/www/example1,在httpd-vhosts.conf中写入:
<VirtualHost :80>
ServerAdmin admin@example1.com
DocumentRoot "/var/www/example1"
ServerName www.example1.com
ServerAlias example1.com
ErrorLog "logs/example1-error.log"
CustomLog "logs/example1-access.log" common
</VirtualHost>

配置说明:
- `<VirtualHost :80>`:监听所有IP的80端口
ServerName:主域名,必须填写ServerAlias:备用域名,例如不带www的主域名DocumentRoot:网站代码的根目录ErrorLog和CustomLog:独立日志文件,方便排查问题
配置第二个虚拟主机
继续追加一段,用于第二个网站:
<VirtualHost :80>
ServerAdmin admin@example2.com
DocumentRoot "/var/www/example2"
ServerName www.example2.com
ServerAlias example2.com
ErrorLog "logs/example2-error.log"
CustomLog "logs/example2-access.log" common
</VirtualHost>
设置目录权限
在httpd.conf的末尾,添加以下内容,确保Apache有权限读取网站目录:
<Directory "/var/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Require all granted是Apache 2.4以上版本的写法,旧版本使用Order Allow,Deny和Allow from all,如果你用的是较高版本,直接使用新语法。
检查语法并重启服务
在命令行中执行:
httpd -t
或
apachectl -t
输出Syntax OK表示配置正确,随后重启Apache:
- Linux:
systemctl restart httpd或systemctl restart apache2 - Windows:在Apache安装目录的
bin文件夹下执行httpd.exe -k restart
你已经在同一台服务器上成功搭建了两个虚拟主机,访问www.example1.com进入第一个网站,访问www.example2.com进入第二个网站。
Apache虚拟主机配置中域名解析怎么处理
很多人在本地测试时,没有真实域名,这时候需要修改本机的hosts文件,将域名指向服务器IP,例如将www.example1.com指向0.0.1。
- Windows:
C:WindowsSystem32driversetchosts - Linux:
/etc/hosts
在末尾添加:
0.0.1 www.example1.com
127.0.0.1 www.example2.com
保存后,直接在浏览器中访问这两个域名即可看到对应网站内容。
如果网站已经上线,需要到域名服务商处将域名A记录解析到服务器IP,等待生效即可,通常解析生效时间在几分钟到24小时之间,国内服务商一般10分钟左右生效。
Apache虚拟主机配置中端口怎么区分
你只是想快速测试一个站点,不想占用80端口,或者服务器80端口已经被其他服务占用,这时可以用基于端口的虚拟主机。

修改httpd.conf中的监听端口,默认情况下是:
Listen 80
添加一个8080端口:
Listen 8080
然后在httpd-vhosts.conf中配置:
<VirtualHost :8080>
DocumentRoot "/var/www/test"
ServerName localhost
</VirtualHost>
这种情况下,访问http://服务器IP:8080即可打开测试站点,基于端口的配置适合内部测试,不适合正式对外提供服务,因为普通用户没有输入端口号的习惯。
80端口与8080端口的对比
| 端口 | 使用场景 | 是否需要加端口号访问 | 适用站点 |
|---|---|---|---|
| 80 | 正式线上环境 | 不需要 | 生产环境网站 |
| 8080 | 测试环境、临时调试 | 需要 | 开发中的项目 |
| 443 | HTTPS加密访问 | 不需要 | 正式商业站点 |
Apache虚拟主机配置中的常见问题排查
虚拟主机配置完成后,时常会遇到一些异常情况,以下问题在开发者和站长中出现的频率较高。
页面一直显示默认首页
访问域名时,显示的是Apache的欢迎页,而非你指定的网站内容,原因是虚拟主机配置没有生效,Apache请求被httpd.conf中的默认站点截获,解决方法是确认Include conf/extra/httpd-vhosts.conf这行代码没有被注释,同时确认httpd-vhosts.conf中的ServerName和访问的域名完全一致。
403 Forbidden 错误
提示无权访问该目录,这类问题绝大多数由目录权限配置导致,检查httpd.conf中的<Directory>配置块,确认Require all granted已经写入,且网站的目录对Apache进程有读取权限,Linux下还需注重目录权限,
chmod -R 755 /var/www/example1
页面404 但其他网站正常
说明虚拟主机本身生效,但DocumentRoot指向的目录中不存在可访问的入口文件,检查网站目录下是否存在index.php或index.html,并确认DirectoryIndex配置中包含这些文件名。
日志文件没有生成
ErrorLog和CustomLog指定的路径,需要Apache对其有写入权限,Linux环境中,确认logs目录属于Apache用户或apache组,日志文件正在生成是排查问题最快的路径之一,相当一部分开发者遇到访问异常时,第一步就是查看logs目录下的错误日志,定位出问题所在行。

本地Apache多站点配置有哪些实操经验
本地电脑上搭建多个站点,是许多前端开发者和PHP学习者日常用到的技能,以Windows环境为例,下载Apache后配置虚拟主机时,有几个细节值得留意:
- 端口占用问题:Windows下
httpd.exe -k stop失效时,在任务管理器结束httpd.exe进程,或者用命令netstat -ano | findstr :80查看占用端口程序的PID,然后结束对应进程 - 路径分割符:Windows下
DocumentRoot使用正斜杠,例如C:/www/mywebsite,复制Windows路径后请手动改过来 - 开发环境工具:XAMPP、phpStudy等集成环境自带虚拟主机管理界面,适合初学者使用,但手动修改配置文件能让你更清晰理解Apache的运作逻辑
需要说明的是,本地开发环境使用域名时,建议统一使用.test、.dev或.localhost等后缀,不要使用.com,避免日后上线时缓存串站。
Q&A:Apache虚拟机配置相关问题
Apache虚拟主机和Nginx配置有什么区别?
Apache使用VirtualHost指令块,Nginx使用server块,Apache的配置分隔清晰,每个站点独立成块,语法相对宽松;Nginx配置更简洁,高并发性能表现更优,但配置文件写起来需要严格套用花括号结构,选用Apache虚拟主机还是Nginx,取决于项目类型如果是PHP传统项目,Apache是稳妥选择;如果是高并发静态资源或反向代理场景,Nginx更合适。
一台服务器最多可以配置多少个虚拟主机?
Apache对虚拟主机的数量没有硬件层面的限制,理论上可以为每个域名创建一个虚拟主机,实际数量受服务器内存、CPU以及并发访问量制约,站点本身静态页面较多,一个2核4G的云服务器可以稳定承载几十个普通流量企业网站,业内的常见建议是单个服务器上部署的虚拟主机数量不宜超过100个,超过这个数量后管理复杂度和故障隔离成本明显上升,此时推荐拆分服务器或使用Docker容器隔离。
配置好的虚拟主机访问速度很慢怎么办?
通过独立配置的ErrorLog和CustomLog查看该站点的访问日志,确认是否存在大量异常请求,另外检查httpd.conf中是否开启了mod_deflate和mod_expires模块,前者负责压缩传输内容,后者设置静态资源缓存时间,据工信部发布的相关宽带发展数据,国内用户访问网站时延受传输压缩和缓存命中率影响明显,开启这两个模块可以显著提升页面加载速度,最后排查PHP进程数或数据库连接数是否被打满,多数情况下,慢的问题不在虚拟主机本身,而在于应用代码和服务器资源配比。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/912391.html


评论列表(4条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@猫bot866:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是端口部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!