[特殊字符] 一机三站,玩转域名分流:Ubuntu 24.04 Apache虚拟主机实战手册 前言在实际生产环境中我们经常需要在一台服务器上托管多个网站。Apache 的虚拟主机Virtual Host功能正是为此而生——它允许在同一台服务器、同一个 IP 地址上通过不同的域名来区分和托管多个独立的网站。本文将带你在 VMware Workstation 17 Pro 虚拟机上从零开始部署 Ubuntu 24.04 LTS并完成 Apache2 多域名虚拟主机的完整配置。整个过程手把手教学适合 Linux 初学者和运维入门同学参考。一、实验环境项目规格虚拟化软件VMware Workstation 17 Pro操作系统Ubuntu 24.04 LTS服务器 IP10.0.0.13Web 服务器Apache 2.4测试域名www.web1.com、www.web2.com、www.web3.com监听端口81说明本实验使用自定义端口 81 而非默认的 80 端口是为了避免与系统已有服务冲突同时展示 Apache 监听非标准端口的配置方法。二、VMware 虚拟机环境准备2.1 创建虚拟机打开 VMware Workstation 17 Pro点击创建新的虚拟机选择典型(推荐)配置类型选择安装程序光盘映像文件(iso)浏览选择 Ubuntu 24.04 LTS 的 ISO 镜像设置虚拟机名称和存放位置指定磁盘容量建议 20GB 以上点击完成开始安装2.2 Ubuntu 24.04 系统安装启动虚拟机选择Try or Install Ubuntu Server选择语言English 或中文均可配置网络建议使用桥接模式或NAT 模式确保虚拟机可以获得 IP 地址设置主机名如ubuntu24-13创建用户和密码安装 OpenSSH Server方便后续远程连接完成安装后重启系统2.3 配置静态 IP可选但推荐为了实验的稳定性建议为虚拟机配置静态 IPbash# 查看当前网卡名称 ip a # 编辑网络配置文件Ubuntu 24.04 使用 Netplan sudo vim /etc/netplan/50-cloud-init.yaml配置示例NAT 模式请根据实际网段调整yamlnetwork: ethernets: ens33: dhcp4: no addresses: - 10.0.0.13/24 gateway4: 10.0.0.2 nameservers: addresses: - 8.8.8.8 - 114.114.114.114 version: 2应用配置bashsudo netplan apply三、Apache2 安装与环境部署3.1 更新软件包索引并安装 Apache2bashsudo apt update sudo apt install apache2 -y安装完成后Apache 服务会自动启动。可以通过以下命令验证bashsystemctl status apache23.2 创建多站点目录与测试页面我们需要为三个不同的网站准备独立的目录和测试页面bash# 创建三个网站的根目录 sudo mkdir -p /data/server/apache/web{1..3} # 创建各站点的测试首页 echo base 10086 port web | sudo tee /data/server/apache/web1/index.html echo base 10087 port web | sudo tee /data/server/apache/web2/index.html echo base 10088 port web | sudo tee /data/server/apache/web3/index.html说明web{1..3}是 Bash 的花括号展开语法等价于web1 web2 web3。3.3 配置本地 hosts 解析用于测试由于我们还没有真实的域名解析需要在/etc/hosts中添加域名映射让本机能够解析这三个测试域名bashecho 10.0.0.13 www.web1.com www.web2.com www.web3.com | sudo tee -a /etc/hosts注意这里的 IP 地址10.0.0.13需要替换为你虚拟机的实际 IP 地址。四、虚拟主机配置4.1 Apache 配置文件结构简介Ubuntu 下 Apache2 的配置文件主要分布在以下目录/etc/apache2/apache2.conf主配置文件/etc/apache2/sites-available/可用站点配置/etc/apache2/sites-enabled/已启用站点配置符号链接/etc/apache2/ports.conf端口监听配置4.2 编辑虚拟主机配置文件在 Ubuntu 中推荐在sites-enabled目录下直接创建配置文件实验环境简化操作也可以按照标准做法在sites-available中创建后使用a2ensite启用。本次实验直接在sites-enabled目录下创建配置文件bashsudo tee /etc/apache2/sites-enabled/vhost.conf -EOF Listen 81 VirtualHost *:81 DocumentRoot /data/server/apache/web1/ ServerName www.web1.com Directory /data/server/apache/web1/ Require all granted /Directory /VirtualHost VirtualHost *:81 DocumentRoot /data/server/apache/web2/ ServerName www.web2.com Directory /data/server/apache/web2/ Require all granted /Directory /VirtualHost VirtualHost *:81 DocumentRoot /data/server/apache/web3/ ServerName www.web3.com Directory /data/server/apache/web3/ Require all granted /Directory /VirtualHost EOF4.3 配置详解指令作用Listen 81让 Apache 监听 81 端口VirtualHost *:81定义监听所有 IP 的 81 端口的虚拟主机DocumentRoot指定该虚拟主机的网站根目录ServerName指定该虚拟主机对应的域名Directory对该目录进行访问权限控制Require all granted允许所有用户访问该目录关键点Apache 通过ServerName指令匹配客户端请求的域名从而实现同一 IP 和端口下多个域名的区分。五、使配置生效并验证5.1 检查配置文件语法在重启服务之前务必检查配置文件语法是否正确bashsudo apachectl -t正常输出应为textSyntax OK如果出现错误请根据提示信息检查配置文件中的拼写或路径问题。5.2 重启 Apache 服务bashsudo systemctl restart apache25.3 查看端口监听状态确认 Apache 已正确监听 81 端口bashsudo netstat -tnulp | grep 81预期输出类似texttcp6 0 0 :::81 :::* LISTEN 3857/apache2六、网站测试6.1 使用域名访问测试bashcurl www.web1.com:81 # 输出base 10086 port web curl www.web2.com:81 # 输出base 10087 port web curl www.web3.com:81 # 输出base 10088 port web6.2 使用 IP Host 头访问测试即使不通过域名访问也可以通过指定Host请求头来模拟域名访问bashcurl -H Host: www.web1.com 10.0.0.13:81 # 输出base 10086 port web6.3 测试结果分析从测试结果可以看出访问www.web1.com:81返回了web1目录下的内容访问www.web2.com:81返回了web2目录下的内容访问www.web3.com:81返回了web3目录下的内容结论Apache 已成功基于请求中的 Host 头部信息即域名将请求路由到对应的虚拟主机和网站目录多域名虚拟主机配置成功七、常见问题排查7.1 端口被占用如果 81 端口已被占用可以更换其他端口如 8080或使用以下命令查看端口占用情况bashsudo lsof -i :817.2 403 Forbidden 错误通常是因为 Directory 配置段中缺少Require all granted指令或者目录权限不足。检查目录权限bashsudo chmod -R 755 /data/server/apache/7.3 域名无法解析确保/etc/hosts中已正确添加域名映射且 IP 地址与虚拟机实际 IP 一致。7.4 配置文件不生效检查配置文件是否放在了正确的目录sites-enabled或sites-available并确保执行了systemctl restart apache2。八、总结通过本次实验我们完成了以下工作✅ 在 VMware Workstation 17 Pro 中部署了 Ubuntu 24.04 LTS 虚拟机✅ 安装并配置了 Apache2 Web 服务器✅ 创建了三个独立的网站目录和测试页面✅ 配置了基于域名的虚拟主机VirtualHost✅ 通过自定义端口 81 实现了多域名多站点访问核心收获Apache 的虚拟主机功能强大且灵活通过ServerName指令可以在单台服务器上托管无数个独立网站这是企业级 Web 托管的基础技能。基于域名的虚拟主机Name-based Virtual Host是目前最常用的方式因为它仅需一个 IP 地址即可实现多站点部署。本文实验基于 Ubuntu 24.04 LTS Apache 2.4VMware Workstation 17 Pro 虚拟化环境。所有命令均经过实际验证可放心参考。