在较新版本中探索全新功能与优化体验
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
当然可以!以下是根据您提供的原始内容,经过错别字修正、语句润色、逻辑补充与原创性提升后的完整优化版本,文章结构更清晰、语言更专业流畅,并增加了技术细节和实用建议,确保内容更具可读性和实用性。
在现代 Web 服务器部署中,Apache HTTP Server 作为全球最广泛使用的开源 Web 服务器之一,凭借其稳定性强、模块丰富、兼容性好等优势,长期占据着重要的地位,无论是个人博客、企业官网,还是开发测试环境,Apache 都能胜任多样化的网站托管需求。
随着业务的发展,单台服务器往往需要承载多个独立站点。“虚拟主机(Virtual Host)”便成为关键解决方案,通过 Apache 的虚拟主机功能,我们可以在同一台物理服务器上运行多个网站,每个站点拥有各自的域名、文档根目录、访问日志甚至安全策略,彼此互不干扰。
本文将带你系统掌握 Apache 虚拟主机的配置方法,涵盖概念解析、环境准备、实际操作、高级优化以及常见问题排查,助你快速搭建多站点服务架构。
什么是 Apache 虚拟主机?
虚拟主机是一种允许多个网站共用一台服务器资源的技术,Apache 支持三种主要类型的虚拟主机模式:
基于名称的虚拟主机(Name-based Virtual Hosting)
这是最常用的方式,多个网站共享同一个 IP 地址和端口(如 80),通过客户端请求中的 Host 头字段来区分目标站点。
✅ 优点:节省 IP 地址资源,配置简单
❌ 缺点:依赖 DNS 解析;早期浏览器或协议不支持时可能受限
基于 IP 的虚拟主机(IP-based Virtual Hosting)
每个网站绑定不同的 IP 地址,即使域名相同也能区分开,适用于对 SSL 证书有特殊要求(如旧版 HTTPS 不支持 SNI)的场景。
✅ 优点:安全性高,兼容性强
❌ 缺点:需要多个公网 IP,成本较高
基于端口的虚拟主机(Port-based Virtual Hosting)
通过监听不同端口号提供服务,例如主站使用 80,测试站使用 8080。
✅ 适用场景:内部测试、API 接口分离
❌ 用户体验差(需手动输入端口)
📌 推荐实践:绝大多数情况下应优先采用“基于名称的虚拟主机”,它兼顾效率与易维护性。
配置前的准备工作
在开始配置之前,请确认已完成以下准备工作:
- ✅ 已安装并正常运行 Apache HTTP Server(Ubuntu/Debian 上通常为
apache2,CentOS/RHEL 上为httpd) - ✅ 拥有管理员权限(root 或具备 sudo 权限的用户)
- ✅ 准备好各网站的内容文件,并规划好文档根目录路径
- ✅ 已注册并正确解析所需域名,或可通过本地
hosts文件进行测试 - ✅ 防火墙已放行 HTTP(端口 80)和 HTTPS(端口 443)流量
检查 Apache 是否已安装并运行
以 Ubuntu/Debian 系统为例:
sudo systemctl status apache2
若未安装,执行以下命令安装:
sudo apt update && sudo apt install apache2 -y
对于 CentOS 7+/RHEL/Fedora 系列:
# CentOS 7/8 使用 yum sudo yum install httpd -y # Fedora 或新版 RHEL 使用 dnf sudo dnf install httpd -y
启动并设置开机自启:
sudo systemctl enable httpd --now
创建网站目录结构
为保证各站点之间隔离清晰,建议为每个虚拟主机创建独立的目录结构。
以两个示例站点 example.com 和 testsite.org 为例:
sudo mkdir -p /var/www/example.com/html sudo mkdir -p /var/www/testsite.org/html
创建简单的测试页面用于验证访问效果:
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/html/index.html echo "<h1>Welcome to testsite.org</h1>" | sudo tee /var/www/testsite.org/html/index.html
设置正确的所有权与权限:
sudo chown -R www-data:www-data /var/www/example.com/html sudo chown -R www-data:www-data /var/www/testsite.org/html sudo chmod -R 755 /var/www
🔍 说明:
www-data是 Debian/Ubuntu 系统下 Apache 默认运行用户- 若为 CentOS/RHEL 系统,则用户组可能是
apache,请相应调整
配置基于名称的虚拟主机
Apache 的虚拟主机配置文件位置因操作系统发行版而异:
| 发行版 | 配置路径 |
|---|---|
| Debian/Ubuntu | /etc/apache2/sites-available/ |
| CentOS/RHEL | /etc/httpd/conf.d/*.conf 或 /etc/httpd/conf/extra/httpd-vhosts.conf |
我们以 Ubuntu 为例继续演示。
进入配置目录
cd /etc/apache2/sites-available/
创建第一个虚拟主机配置文件
sudo nano example.com.conf
粘贴如下配置内容:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
<Directory /var/www/example.com/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
创建第二个站点配置
sudo nano testsite.org.conf
配置如下:
<VirtualHost *:80>
ServerName testsite.org
ServerAlias www.testsite.org
DocumentRoot /var/www/testsite.org/html
ErrorLog ${APACHE_LOG_DIR}/testsite.org_error.log
CustomLog ${APACHE_LOG_DIR}/testsite.org_access.log combined
<Directory /var/www/testsite.org/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
⚠️ 注意事项:
ServerName必须与访问域名一致AllowOverride All允许.htaccess文件生效(常用于 WordPress 等 CMS)Require all granted开启访问授权(Apache 2.4+ 新语法)
启用虚拟主机站点
使用 Apache 提供的工具启用配置:
sudo a2ensite example.com.conf sudo a2ensite testsite.org.conf
💡 小知识:
a2ensite是 "Apache2 Enable Site" 的缩写,会自动在sites-enabled目录下创建软链接。
如果默认站点(000-default.conf)正在运行且不需要,可将其禁用:
sudo a2dissite 000-default.conf
重新加载 Apache 配置
sudo systemctl reload apache2
此时新的虚拟主机已生效。
测试虚拟主机是否成功
真实域名访问(生产环境)
如果你拥有已解析到服务器公网 IP 的域名,直接在浏览器访问:
http://example.comhttp://testsite.org
查看是否显示对应的欢迎页面。
本地 hosts 映射(开发测试)
若无公网域名,可在本地计算机修改 hosts 文件模拟 DNS 解析。
Windows 系统:
编辑文件:C:\Windows\System32\drivers\etc\hosts
替换 168.1.100 为你的服务器真实 IP):
168.1.100 example.com
192.168.1.100 testsite.org
Linux/macOS 系统:
编辑文件:/etc/hosts
同样添加上述映射后保存。
刷新 DNS 缓存(视系统而定),然后打开浏览器访问即可完成测试。
高级配置建议(提升安全性与性能)
完成基础配置后,建议进一步优化站点表现与安全性:
启用 HTTPS 加密(SSL/TLS)
推荐使用 Let’s Encrypt 提供的免费 TLS 证书,结合 Certbot 自动化部署:
sudo apt install certbot python3-certbot-apache -y sudo certbot --apache -d example.com -d www.example.com


