服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-25 简米科技 4,661 字 11 分钟阅读

如何在虚拟机中用httpd搭建虚拟主机?,虚拟机httpd虚拟主机配置步骤详解

导读在虚拟机中用httpd搭建虚拟主机,核心就是三件事:装好httpd、为每个站点写VirtualHost、让域名解析指向这台虚拟机, 只要这三步走通,本地开发、内网演示、多站点隔离都能在一台虚拟机里完成,不必为每个项目单独开一台机器,虚拟机里的httpd虚拟主机,本质是让一个Apache进程根据访问请求里的域名……

在虚拟机中用httpd搭建虚拟主机,核心就是三件事:装好httpd、为每个站点写VirtualHost、让域名解析指向这台虚拟机。 只要这三步走通,本地开发、内网演示、多站点隔离都能在一台虚拟机里完成,不必为每个项目单独开一台机器。

虚拟机里的httpd虚拟主机,本质是让一个Apache进程根据访问请求里的域名、端口或IP,把请求分发到不同网站目录,常见类型有三种,先选对模式再动手,后面少踩坑。

类型 配置依据 适用场景 注意点
基于域名 ServerName 多个站点共用80端口 需要hosts或DNS配合
基于端口 Listen与VirtualHost端口 临时测试、内部工具 访问时要带端口号
基于IP VirtualHost指定IP 一台机器绑定多个IP 虚拟机需配置多网卡或多IP

据Apache官方文档,VirtualHost可以组合使用域名、端口和IP,但生产环境更常见的是基于域名,下面以CentOS/Rocky Linux系里的httpd为例,Ubuntu对应软件包叫apache2,配置目录略有差异。

虚拟机中httpd配置虚拟主机详细步骤:从安装到访问

别急着改配置文件,先把虚拟机网络和主机名理顺,本地用VMware或VirtualBox时,NAT模式适合自己访问,桥接模式适合让局域网同事访问,用ip addr确认虚拟机IP,比如168.56.101,后面hosts测试会用到。

环境准备与httpd安装

在CentOS/Rocky/AlmaLinux中执行:

sudo dnf install httpd -y
sudo systemctl enable --now httpd
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

如果是Ubuntu/Debian,对应命令是sudo apt install apache2 -y,服务名是apache2,站点配置通常放在/etc/apache2/sites-available/,用a2ensite启用,本文示例以httpd的/etc/httpd/conf.d/为主,思路完全一致。

安装后访问http://虚拟机IP,看到默认测试页说明httpd已经跑起来,此时先别加站点,确认防火墙和SELinux没有拦截80端口。

CentOS用httpd搭建基于域名的虚拟主机怎么操作

假设要建两个站点:site1.com和site2.com,先创建目录和测试首页:

sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html
echo "site1 ok" | sudo tee /var/www/site1.com/public_html/index.html
echo "site2 ok" | sudo tee /var/www/site2.com/public_html/index.html
sudo chown -R apache:apache /var/www/site1.com /var/www/site2.com
sudo chmod -R 755 /var/www/site1.com /var/www/site2.com

接着新建/etc/httpd/conf.d/vhost.conf,写入两个VirtualHost:

<VirtualHost :80>
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public_html
    ErrorLog /var/log/httpd/site1.com-error.log
    CustomLog /var/log/httpd/site1.com-access.log combined
    <Directory /var/www/site1.com/public_html>
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost :80>
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/site2.com/public_html
    ErrorLog /var/log/httpd/site2.com-error.log
    CustomLog /var/log/httpd/site2.com-access.log combined
    <Directory /var/www/site2.com/public_html>
        Require all granted
    </Directory>
</VirtualHost>

保存后先做语法检查,再重启:

sudo apachectl configtest
sudo systemctl restart httpd

如果启用了SELinux,目录上下文不对会出现403,用下面命令修正:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/site1.com/public_html(/.)?"
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/site2.com/public_html(/.)?"
sudo restorecon -Rv /var/www/site1.com/public_html /var/www/site2.com/public_html

没有安装semanage时,先装policycoreutils-python-utils,这一步是很多新手在虚拟机里配httpd虚拟主机时最容易漏掉的环节。

本地hosts与域名解析怎么配合测试

没有真实域名也能测,Windows修改C:\Windows\System32\drivers\etc\hosts,Linux修改/etc/hosts,加入:

168.56.101 site1.com www.site1.com
192.168.56.101 site2.com www.site2.com

然后在宿主机浏览器访问http://site1.com和http://site2.com,看到不同首页就说明基于域名的虚拟主机生效了,如果DNS还没生效,也可以用curl指定Host头:

curl -I -H "Host: site1.com" http://192.168.56.101

业内专家指出,本地开发用hosts模拟域名,比直接改端口更接近真实生产环境,后续迁移到内网DNS或公网解析时改动更小。

httpd虚拟主机和Nginx虚拟主机有什么区别

在虚拟机里做多站点实验,httpd和Nginx都能实现,但配置习惯不同,下面这张表可以帮助判断该选谁。

对比项 httpd Nginx
配置方式 VirtualHost、目录级配置 server块、location块
并发模型 多进程/多线程 事件驱动
静态资源 稳定、生态成熟 高并发场景常见
动态PHP mod_php或php-fpm 通常配php-fpm
适用场景 传统企业内网、教学、需要.htaccess 高并发前端、反向代理

如果项目依赖.htaccess,或者团队已有Apache运维习惯,虚拟机里用httpd更顺手,如果只是做高并发静态站点实验,Nginx的server块写起来更紧凑,行业共识认为,学习虚拟主机概念时先掌握httpd的VirtualHost,再迁移到Nginx会更容易理解请求分发逻辑。

本地虚拟机搭建httpd虚拟主机需要多少钱

软件授权成本基本可以忽略:httpd本身开源免费,VirtualBox免费,VMware Workstation Player对个人使用也提供免费版本,费用通常集中在硬件、云资源或运维时间上,而不是软件本身,近年来不少开发者用旧笔记本装VirtualBox加Rocky Linux做测试,成本主要是电费和折腾时间。

如果不想本地开虚拟机,也可以买低配云服务器按需付费,但本地测试用hosts就能完成域名访问,不需要买域名和公网IP,对个人学习和小团队内网演示来说,虚拟机方案更可控。

北京企业内网Apache虚拟主机配置场景

在北京不少企业的测试环境里,IT会划一个独立VLAN,用桥接模式把虚拟机接进去,再给虚拟机固定IP或DHCP保留地址,此时配置思路和本地一致,但要多做两件事:一是把site1.com、site2.com写入内网DNS或统一维护hosts;二是确认公司防火墙策略允许80端口在测试网段内访问,若只是短期演示,直接让同事改hosts指向虚拟机IP最快,不必动DNS。

虚拟机httpd虚拟主机常见问题解答

虚拟机中httpd虚拟主机配置后浏览器访问403怎么办?

先查三处:DocumentRoot目录权限是否为755且属主为apache;VirtualHost里的<Directory>是否写了Require all granted;SELinux上下文是否被拦截,用ls -Zd /var/www/site1.com/public_html看上下文,用restorecon -Rv修正,再重启httpd。

httpd虚拟主机和基于端口虚拟主机怎么选?

多个站点共用80端口、希望用域名区分时,选基于域名,临时测试、内部工具不想改hosts时,可以用Listen 8080加端口VirtualHost,访问时写http://IP:8080,生产环境一般不建议长期使用非常规端口。

在虚拟机中用httpd搭建虚拟主机需要公网IP吗?

不需要,本地hosts或内网DNS就能完成域名访问测试;公网IP只在需要外部访问时使用,并且要同步检查防火墙、安全组和端口映射,虚拟机里的httpd虚拟主机先把80端口和内网访问跑通,再考虑对外发布。

虚拟机中用httpd搭建虚拟主机并不复杂,关键是把VirtualHost、目录权限和域名解析三件事对齐。 先在本地用hosts跑通两个站点,再迁移到内网DNS或云环境,路径最稳。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱