Apache虚拟主机配置全攻略从零开始搭建多站点环境
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
Apache 虚拟主机、Name-based Virtual Host、IP-based、Port-based、Web 服务器部署、一机多站
引言:为什么你需要掌握 Apache 虚拟主机?
在当今互联网高速发展的时代,单台服务器承载多个网站早已成为行业标配,无论是个人开发者搭建作品集、中小企业部署业务系统,还是大型云服务商托管海量客户站点,高效利用服务器资源、灵活管理多个独立站点已成为刚需。
作为全球使用最广泛的开源 Web 服务器软件,Apache HTTP Server 凭借其强大的模块化架构和成熟的社区生态,持续稳居 Web 服务领域的核心地位,而它的“虚拟主机(Virtual Host)”功能,正是实现“一机多站”的关键技术支撑。
本文将从零开始,系统、详尽地讲解 如何在 Apache 中配置虚拟主机,涵盖基于域名、IP 地址和端口的三种主流方式,并提供实战步骤、常见问题与最佳实践,助你快速构建稳定高效的多站点架构。
什么是 Apache 虚拟主机?
虚拟主机(Virtual Host),又称虚拟服务器,是 Apache 提供的一种在同一台物理服务器上托管多个独立网站的技术方案,每个虚拟主机可拥有:
- 独立的域名(如
www.site1.com) - 独立的网站根目录(DocumentRoot)
- 独立的日志文件(访问日志、错误日志)
- 独立的访问控制策略
- 独立的 SSL 证书配置
这些站点彼此隔离、互不干扰,在用户访问时表现如同独立的服务器,极大节省了硬件成本与运维开销,显著提升了服务器资源利用率——这正是现代 Web 部署的标准实践。
Apache 支持的三种虚拟主机类型
| 类型 | 描述 | 适用场景 |
|---|---|---|
| 基于名称的虚拟主机 (Name-based) |
通过不同域名区分站点 (最常用) |
生产环境、域名已备案/解析 |
| 基于 IP 的虚拟主机 (IP-based) |
每个站点绑定独立公网 IP | 多 IP 服务器、高安全隔离需求 |
| 基于端口的虚拟主机 (Port-based) |
同一 IP 下通过不同端口号区分 | 开发测试、内网服务、临时调试 |
💡 推荐优先使用“基于名称”的方式,它配置简单、扩展性强,且符合主流互联网架构规范。
前期准备工作
在动手配置前,请确保已完成以下基础准备:
-
✅ 已安装 Apache 服务器
- Ubuntu/Debian:
sudo apt update && sudo apt install apache2 - CentOS/RHEL:
sudo yum install httpd或sudo dnf install httpd
- Ubuntu/Debian:
-
✅ 服务器拥有公网 IP 或局域网可达 IP
-
✅ 域名已注册并正确解析到服务器 IP(若使用域名方式)
-
✅ 熟悉基本 Linux 命令行操作(如
mkdir,chmod,nano等) -
✅ 拥有服务器 root 权限或 sudo 权限
-
✅ (可选)备份现有 Apache 配置,以防误操作导致服务中断
第一步:启用 Apache 虚拟主机模块
默认情况下,Apache 可能未启用虚拟主机相关模块,请按以下步骤激活:
启用必要模块
sudo a2enmod vhost_alias
注:部分系统可能需额外启用
rewrite、ssl等模块,视需求而定。
确认主配置包含虚拟主机入口
不同发行版路径略有差异:
- Ubuntu/Debian:
/etc/apache2/apache2.conf或检查/etc/apache2/sites-enabled/ - CentOS/RHEL:
/etc/httpd/conf/httpd.conf
在配置文件末尾确认存在如下语句(若无则手动添加):
IncludeOptional sites-enabled/*.conf
重启 Apache 使配置生效
# Ubuntu/Debian sudo systemctl restart apache2 # CentOS/RHEL sudo systemctl restart httpd
配置基于名称的虚拟主机(推荐)
我们以两个示例站点为例:www.site1.com 和 www.site2.com
步骤 1️⃣:创建网站目录结构
sudo mkdir -p /var/www/site1.com/public_html sudo mkdir -p /var/www/site2.com/public_html
步骤 2️⃣:设置目录权限(安全第一)
sudo chown -R $USER:$USER /var/www/site1.com/public_html sudo chown -R $USER:$USER /var/www/site2.com/public_html sudo chmod -R 755 /var/www
⚠️ 生产环境中建议使用专用非 root 用户(如
www-data)作为属主,避免权限过高引发安全风险。
步骤 3️⃣:创建测试首页
echo "<h1>🎉 欢迎访问 Site1</h1>" | sudo tee /var/www/site1.com/public_html/index.html echo "<h1>🎉 欢迎访问 Site2</h1>" | sudo tee /var/www/site2.com/public_html/index.html
步骤 4️⃣:编写虚拟主机配置文件
在 Ubuntu 中,推荐将配置文件放在 /etc/apache2/sites-available/ 目录下:
创建 site1.com.conf
<VirtualHost *:80>
ServerAdmin admin@site1.com
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot /var/www/site1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
<Directory /var/www/site1.com/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
创建 site2.com.conf
<VirtualHost *:80>
ServerAdmin admin@site2.com
ServerName site2.com
ServerAlias www.site2.com
DocumentRoot /var/www/site2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/site2_error.log
CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
<Directory /var/www/site2.com/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
🔍 小贴士:
AllowOverride All允许.htaccess文件生效,适用于 WordPress 等 CMS;若追求性能,可设为None并将规则写入主配置。
步骤 5️⃣:启用站点并重载服务
sudo a2ensite site1.com.conf sudo a2ensite site2.com.conf sudo systemctl reload apache2
✅ 使用
reload而非restart,可在不中断现有连接的情况下应用新配置。
步骤 6️⃣:本地测试(修改 hosts 文件)
若域名尚未解析,可在本地电脑临时绑定 IP:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Linux/Mac:
/etc/hosts替换为你的服务器 IP):
168.1.100 site1.com www.site1.com
192.168.1.100 site2.com www.site2.com
保存后,在浏览器访问:
http://site1.comhttp://site2.com
即可看到不同页面,说明配置成功!
配置基于 IP 的虚拟主机
适用于拥有多公网 IP 的服务器(如 168.1.10 和 168.1.11)。
确保 Apache 监听所有 IP
在主配置中保留或添加:
Listen 80
分别配置站点
site1_ip.conf
<VirtualHost 192.168.1.10:80>
ServerName site1.com
DocumentRoot /var/www


