Ubuntu Debian系统安装与配置指南
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
在现代Web开发与服务器运维中,Apache HTTP Server(简称 Apache)作为最广泛使用的开源Web服务器之一,凭借其卓越的稳定性、强大的模块扩展能力以及跨平台兼容性,成为个人开发者、中小企业乃至大型企业部署网站服务的首选工具。
而其中一项核心功能——虚拟主机(Virtual Host),则让一台物理服务器能够同时托管多个独立网站,每个站点可拥有专属域名、独立的文件目录和访问控制策略。Apache怎么开始虚拟主机? 本文将带你从零开始,系统讲解如何在Linux环境下配置基于名称的虚拟主机,助你轻松实现多站点共存的服务器架构。
前期准备:安装并启动Apache服务
在配置虚拟主机前,请确保你的服务器已正确安装并运行Apache,本文以主流Linux发行版为例进行说明。
安装Apache
-
Ubuntu/Debian 系统:
sudo apt update sudo apt install apache2 -y
-
CentOS/RHEL/Fedora 系统:
sudo yum install httpd -y # CentOS 7及以下 # 或使用 dnf(CentOS 8+ / RHEL 8+) sudo dnf install httpd -y
⚠️ 提示:不同系统的包管理器略有差异,请根据实际操作系统选择命令。
启动并设置开机自启
# Ubuntu/Debian sudo systemctl start apache2 sudo systemctl enable apache2 # CentOS/RHEL sudo systemctl start httpd sudo systemctl enable httpd
验证服务状态
sudo systemctl status apache2 # Ubuntu # 或 sudo systemctl status httpd # CentOS
若显示 active (running),表示服务已正常运行。
打开浏览器访问服务器IP地址(如 http://192.168.1.100),应能看到Apache默认欢迎页,说明基础环境已就绪。
理解虚拟主机的工作原理
Apache支持两种类型的虚拟主机:
| 类型 | 特点 |
|---|---|
| 基于名称的虚拟主机(Name-based) | 多个域名共享同一IP和端口,通过请求头中的 Host 字段区分目标站点,最常用 |
| 基于IP的虚拟主机(IP-based) | 每个站点绑定不同的IP地址,适用于需要SSL证书但未支持SNI的老系统 |
✅ 推荐使用“基于名称”的方式,节省IP资源,配置简单,适合绝大多数场景。
你可以将 www.site1.com 和 www.site2.com 指向同一个服务器IP,但展示完全不同的网页内容,彼此互不干扰。
创建网站目录结构与测试页面
为每个站点建立独立的文档根目录(DocumentRoot),便于管理和权限隔离。
sudo mkdir -p /var/www/site1.com/html sudo mkdir -p /var/www/site2.com/html
接着创建简单的测试首页:
echo "<!DOCTYPE html>
<html lang=\"zh\">
<head>
<meta charset=\"UTF-8\" />Welcome to Site1</title>
</head>
<body>
<h1 style='color:#4a7;'>🎉 欢迎来到 Site1.com</h1>
<p>这是第一个虚拟主机的测试页面。</p>
</body>
</html>" | sudo tee /var/www/site1.com/html/index.html
echo "<!DOCTYPE html>
<html lang=\"zh\">
<head>
<meta charset=\"UTF-8\" />Welcome to Site2</title>
</head>
<body>
<h1 style='color:#c53;'>🚀 欢迎来到 Site2.com</h1>
<p>这是第二个虚拟主机的测试页面。</p>
</body>
</html>" | sudo tee /var/www/site2.com/html/index.html
🔐 注意:确保Apache进程用户(通常是
www-data或apache)对这些目录有读取权限:sudo chown -R www-data:www-data /var/www/site1.com sudo chown -R www-data:www-data /var/www/site2.com sudo chmod -R 755 /var/www/*/html
编写虚拟主机配置文件
Apache的虚拟主机配置因系统而异:
- Debian/Ubuntu 系列:配置文件位于
/etc/apache2/sites-available/ - Red Hat/CentOS 系列:通常放在
/etc/httpd/conf.d/目录下或主配置中
创建 site1.com 的配置文件(Ubuntu)
sudo nano /etc/apache2/sites-available/site1.com.conf
输入如下配置:
<VirtualHost *:80>
ServerName www.site1.com
ServerAlias site1.com
DocumentRoot /var/www/site1.com/html
# 日志配置
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
# 目录权限控制
<Directory "/var/www/site1.com/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
创建 site2.com 的配置文件
并修改对应字段:
sudo cp /etc/apache2/sites-available/site1.com.conf /etc/apache2/sites-available/site2.com.conf sudo nano /etc/apache2/sites-available/site2.com.conf
替换关键参数:
ServerName www.site2.com
ServerAlias site2.com
DocumentRoot /var/www/site2.com/html
ErrorLog ${APACHE_LOG_DIR}/site2_error.log
CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
💡 小技巧:你可以统一日志路径格式,方便后期集中分析。
启用站点并重载Apache配置
启用虚拟主机(仅 Ubuntu/Debian)
Apache提供了便捷的脚本工具来启用/禁用站点:
sudo a2ensite site1.com.conf sudo a2ensite site2.com.conf
输出提示“Site enabled”即表示成功激活。
可选:禁用默认站点
避免冲突,建议关闭默认站点(初始欢迎页):
sudo a2dissite 000-default.conf
语法检查与重启服务
始终先验证配置是否合法,防止错误导致服务中断:
sudo apache2ctl configtest # 输出 Syntax OK 表示无误
然后重新加载Apache服务:
sudo systemctl reload apache2 # Ubuntu # 或 sudo systemctl restart httpd # CentOS(有时需restart)
本地测试与DNS模拟
如果你尚未购买真实域名,可以通过修改本地 hosts 文件实现域名解析模拟。
修改 hosts 文件
-
Windows:
路径:C:\Windows\System32\drivers\etc\hosts
使用管理员权限编辑该文件。 -
Linux/macOS:
路径:/etc/hosts
使用sudo nano /etc/hosts编辑。
添加以下记录(假设服务器内网IP为 168.1.100):
168.1.100 www.site1.com site1.com
192.168.1.100 www.site2.com site2.com
保存后,在浏览器中分别访问:
如果看到各自对应的测试页面,则说明虚拟主机配置成功!
常见问题排查指南
即使步骤正确,也可能遇到异常情况,以下是典型问题及解决方案:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 访问返回403 Forbidden | 权限不足或目录不可读 | 检查 DocumentRoot 所属用户和权限,确保 www-data 可访问 |
| 页面无法加载,连接超时 | 防火墙阻断80端口 | 开放防火墙:sudo ufw allow 'Apache'(Ubuntu)sudo firewall-cmd --permanent --add-service=http(CentOS) |
| 显示默认页面而非指定站点 | 默认站点未禁用或优先级更高 | 禁用 ` |



