在管理 CentOS 7 服务器时,一个核心且强大的功能就是配置虚拟主机(VirtualHost),这项技术允许我们在单一服务器上,仅使用一个 IP 地址,来托管多个独立的网站或应用程序,对于希望最大化利用服务器资源、降低成本的站长或开发者来说,掌握 VirtualHost 的配置是必不可少的技能。
本文将引导您完成在 CentOS 7 系统上,使用 Apache HTTP 服务器配置虚拟主机的完整流程,我们会从基础环境准备开始,逐步深入到具体的配置细节和注意事项,力求清晰易懂。

准备工作:确保环境就绪
在开始之前,我们需要确保服务器已经安装了 Apache(通常称为 httpd 服务),您可以通过以下命令进行检查和安装:
更新系统包:
yum update -y
安装 Apache:
yum install httpd -y
启动 Apache 并设置开机自启:
systemctl start httpd systemctl enable httpd
(可选)配置防火墙: 如果您的服务器开启了防火墙,需要放行 HTTP(80端口)和 HTTPS(443端口)流量。
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
完成这些步骤后,您应该可以通过服务器的 IP 地址在浏览器中看到 Apache 的默认测试页面,这表示我们的基础环境已经搭建成功。

理解 VirtualHost 的核心概念
Apache 通过 VirtualHost 指令来区分不同的网站,每个虚拟主机都拥有自己的配置文件,其中定义了诸如网站域名、网站文件根目录、日志文件位置等关键信息。
当用户通过浏览器访问您的服务器时,Apache 会根据请求中的域名,来匹配并指向对应的 VirtualHost 配置,从而正确地将内容呈现给访客,这是一种高效且灵活的托管方式。
分步配置虚拟主机
假设我们需要同时托管两个网站:www.site1.com 和 www.site2.com,以下是详细的配置步骤。
第一步:创建网站根目录
默认情况下,Apache 的网站文件存放在 /var/www/html,为了保持结构清晰,我们为每个网站创建独立的目录。
- 为第一个网站创建目录:
mkdir -p /var/www/site1.com/public_html
- 为第二个网站创建目录:
mkdir -p /var/www/site2.com/public_html
public_html 目录将是存放该网站所有网页文件(如 HTML、PHP 文件)的地方。
第二步:设置目录权限
为了确保 Apache 进程(通常以 apache 或 www-data 用户身份运行)能够读取和执行这些目录中的文件,我们需要设置正确的所有权。

一种推荐的方法是將目录的所有权赋予 Apache 用户,在 CentOS 7 上,Apache 用户通常是 apache。
chown -R apache:apache /var/www/site1.com/public_html chown -R apache:apache /var/www/site2.com/public_html
设置合理的目录权限,755(所有者可读写执行,组和其他用户可读执行)和文件权限 644。
chmod -R 755 /var/www
第三步:创建 VirtualHost 配置文件
Apache 的主配置文件是 /etc/httpd/conf/httpd.conf,但最佳实践是为每个虚拟主机创建独立的配置文件,并将它们放在 /etc/httpd/conf.d/ 目录下,Apache 在启动时会自动加载该目录下所有以 .conf 结尾的文件。
为
site1.com创建配置文件:vi /etc/httpd/conf.d/site1.com.conf
将以下配置内容写入文件,请务必将
serveradmin@example.com和www.site1.com替换为您自己的实际邮箱和域名。<VirtualHost *:80> ServerAdmin serveradmin@example.com ServerName www.site1.com ServerAlias 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"> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>配置说明:
<VirtualHost *:80>:表示该虚拟主机监听 80 端口(HTTP)。ServerName:网站的主要域名。ServerAlias:网站的别名,例如不带www的域名。DocumentRoot:网站文件的根目录路径。ErrorLog和CustomLog:指定该网站独立的错误日志和访问日志路径,便于问题排查。<Directory> ... </Directory>:针对网站目录进行额外的权限和功能配置。AllowOverride All允许该目录使用.htaccess文件进行重写等设置,这对许多 PHP 程序(如 WordPress)至关重要。
同样地,为
site2.com创建配置文件/etc/httpd/conf.d/site2.com.conf,并修改相应的域名和路径。
第四步:创建测试页面
在重启服务之前,我们可以在每个网站的 public_html 目录下创建一个简单的 index.html 文件,以便测试配置是否成功。
为 site1.com 创建测试页:
echo "<h1>Welcome to Site 1!</h1>" > /var/www/site1.com/public_html/index.html
为 site2.com 也创建类似但内容不同的测试页,以便区分。
第五步:测试配置并重启 Apache
在重启 Apache 之前,务必使用 httpd -t 命令测试配置文件语法是否正确,这能有效避免因配置错误导致服务无法启动。
httpd -t
如果显示 Syntax OK,则可以安全地重启 Apache 服务以使新配置生效:
systemctl restart httpd
最终测试与重要提示
由于我们可能还没有将域名实际解析到服务器的 IP 地址,可以在本地计算机的 hosts 文件中临时添加记录进行测试,在 Windows 的 C:\Windows\System32\drivers\etc\hosts 或 Linux/Mac 的 /etc/hosts 文件中添加:
您的服务器IP地址 www.site1.com
您的服务器IP地址 www.site2.com 添加保存后,在浏览器中分别访问 http://www.site1.com 和 http://www.site2.com,应该能看到之前创建的不同测试页面。
几点关键提醒:
- SELinux 考虑: 如果您的服务器启用了 SELinux(CentOS 7 默认开启),可能需要调整文件上下文,以确保 Apache 能够访问新创建的网站目录,可以使用
semanage fcontext和restorecon命令进行调整。 - 域名解析: 上述 hosts 文件方法仅用于临时测试,要让公众正常访问,您必须在域名注册商处将域名的 A 记录正确指向您服务器的公网 IP 地址。
- 安全性: 配置完成后,请务必关注服务器和网站的安全,及时更新软件,并考虑为网站部署 SSL 证书,启用 HTTPS 加密访问。
通过以上步骤,您应该已经成功在 CentOS 7 服务器上配置了多个虚拟主机,这种方法是现代 Web 托管的基础,其灵活性和高效性使得管理多个项目变得轻松,实践是掌握这项技能的最佳途径,建议在测试环境中多尝试,熟悉每一个环节。
