5154

Good Luck To You!

Linux7系统下Apache如何创建虚拟主机?

在 CentOS 7 这一流行的企业级 Linux 发行版上,Apache HTTP 服务器(通常称为 httpd)是托管网站的首选方案,虚拟主机技术允许您在同一台物理服务器上运行多个独立的网站,这对于资源整合、成本控制和简化管理具有重要意义,本文将详细介绍如何在 Linux 7 系统上为 Apache 创建和配置基于域名的虚拟主机,整个过程清晰明了,旨在帮助您快速掌握这一核心技能。

准备工作

在开始创建虚拟主机之前,请确保您的系统已满足以下基本条件:

  1. 已安装 CentOS 7 或其他基于 Red Hat 7 的系统
  2. 拥有 sudo 或 root 权限,因为配置文件和服务管理需要管理员权限。
  3. Apache 已安装,如果尚未安装,可以通过以下命令快速安装:
    sudo yum update -y
    sudo yum install httpd -y
  4. Apache 服务已启动并设置为开机自启
    sudo systemctl start httpd
    sudo systemctl enable httpd
  5. 准备至少两个用于测试的域名example1.comexample2.com,如果您没有真实的域名,可以通过修改本地计算机的 hosts 文件来模拟域名解析。

第一步:创建网站目录结构

每个虚拟主机都需要一个独立的目录来存放其网站文件(如 HTML、CSS、图片等),一个良好的实践是将所有网站根目录统一放在 /var/www/ 下。

我们将为两个示例网站 example1.comexample2.com 创建目录结构。

# 为 example1.com 创建目录
sudo mkdir -p /var/www/example1.com/html
# 为 example2.com 创建目录
sudo mkdir -p /var/www/example2.com/html

这里的 -p 参数确保在父目录不存在时能够自动创建。html 子目录是存放网站实际内容的常规做法。

第二步:设置目录权限

为了确保 Apache 进程(在 CentOS 7 中,其运行用户和组通常是 apache)能够正确读取和写入网站文件,我们需要为新创建的目录设置正确的所有权。

# 更改 example1.com 目录的所有权
sudo chown -R apache:apache /var/www/example1.com
# 更改 example2.com 目录的所有权
sudo chown -R apache:apache /var/www/example2.com
# 确保目录权限正确,允许读取和执行
sudo chmod -R 755 /var/www

chown -R 命令会递归地将目录及其内部所有文件的所有权设置为 apache 用户和 apache 组。chmod 755 是一个安全的权限设置,允许所有者读写执行,其他用户和组读执行。

第三步:为每个虚拟主机创建示例网页

为了在配置完成后能够直观地验证虚拟主机是否工作,我们为每个网站创建一个简单的 index.html 文件。

example1.com 创建主页:

sudo vi /var/www/example1.com/html/index.html

在文件中输入以下内容:

<!DOCTYPE html>
<html>
  <head>欢迎来到 example1.com</title>
  </head>
  <body>
    <h1>成功!example1.com 虚拟主机已配置!</h1>
  </body>
</html>

example2.com 创建主页:

sudo vi /var/www/example2.com/html/index.html

在文件中输入以下内容:

<!DOCTYPE html>
<html>
  <head>欢迎来到 example2.com</title>
  </head>
  <body>
    <h1>成功!example2.com 虚拟主机已配置!</h1>
  </body>
</html>

第四步:创建虚拟主机配置文件

这是最关键的一步,在 CentOS 7 中,Apache 的主配置文件是 /etc/httpd/conf/httpd.conf,最佳实践不是直接修改此文件,而是在 /etc/httpd/conf.d/ 目录下为每个虚拟主机创建独立的配置文件,Apache 会自动加载此目录下所有以 .conf 结尾的文件。

为 example1.com 创建配置文件:

sudo vi /etc/httpd/conf.d/example1.com.conf

粘贴到文件中:

<VirtualHost *:80>
    ServerAdmin webmaster@example1.com
    DocumentRoot "/var/www/example1.com/html"
    ServerName example1.com
    ServerAlias www.example1.com
    ErrorLog "/var/log/httpd/example1.com-error_log"
    CustomLog "/var/log/httpd/example1.com-access_log" combined
</VirtualHost>

为 example2.com 创建配置文件:

sudo vi /etc/httpd/conf.d/example2.com.conf

粘贴到文件中:

<VirtualHost *:80>
    ServerAdmin webmaster@example2.com
    DocumentRoot "/var/www/example2.com/html"
    ServerName example2.com
    ServerAlias www.example2.com
    ErrorLog "/var/log/httpd/example2.com-error_log"
    CustomLog "/var/log/httpd/example2.com-access_log" combined
</VirtualHost>

配置指令解析:

  • <VirtualHost *:80>: 定义一个虚拟主机块,监听所有 IP 地址()的 80 端口。
  • ServerAdmin: 管理员邮箱,当网站出错时,错误页面可能会显示此邮箱。
  • DocumentRoot: 网站文件的根目录,必须与第二步中创建的路径一致。
  • ServerName: 该虚拟主机的主要域名,这是 Apache 用来区分不同网站的关键。
  • ServerAlias: 域名的别名,www 子域名。
  • ErrorLog / CustomLog: 分别指定错误日志和访问日志的存放路径,将不同网站的日志分开记录非常有利于排查问题。

第五步:测试并重启 Apache 服务

在应用新配置之前,最好先检查 Apache 配置文件的语法是否存在错误。

sudo apachectl configtest

如果屏幕显示 Syntax OK,说明配置没有问题,重启 Apache 服务以使新的虚拟主机配置生效。

sudo systemctl restart httpd

第六步:验证虚拟主机

最后一步是验证我们的配置是否成功。

  • 如果您使用的是真实域名:请确保您的域名 A 记录已正确指向服务器的 IP 地址,在浏览器中分别访问 http://example1.comhttp://example2.com,您应该能看到各自对应的欢迎页面。
  • 如果您在本地测试:需要修改您本地计算机(非服务器)的 hosts 文件。
    • 在 Windows 上,文件路径是 C:\Windows\System32\drivers\etc\hosts
    • 在 macOS 或 Linux 上,文件路径是 /etc/hosts
    • 在文件末尾添加以下两行(请将 your_server_ip 替换为您服务器的实际 IP 地址):
      your_server_ip example1.com
      your_server_ip example2.com

      保存文件后,在浏览器中访问这两个域名,同样应该能看到不同的页面。

至此,您已成功在 Linux 7 系统上为 Apache 创建了两个基于域名的虚拟主机,您可以按照相同的步骤,为更多的网站添加虚拟主机配置。

核心配置文件路径速查

为了方便您日后管理和查阅,下表小编总结了本次操作中的核心路径和文件:

配置项 路径/值 说明
网站根目录 /var/www/your_domain.com/html 存放网站文件的目录,每个站点独立
虚拟主机配置文件 /etc/httpd/conf.d/your_domain.com.conf 每个站点的独立配置文件,推荐使用
Apache 主配置文件 /etc/httpd/conf/httpd.conf Apache 的全局配置文件,一般不建议直接修改
日志文件 /var/log/httpd/ Apache 的默认日志目录,包括访问和错误日志
服务管理命令 systemctl restart httpd 重启 Apache 服务以应用新配置

相关问答 FAQs

我按照步骤操作完毕,但访问两个域名都显示的是同一个网站的页面,这是为什么?

解答: 这个问题通常由以下几个原因造成:

  1. Apache 未重启:您可能修改了配置文件但忘记重启 Apache 服务,请务必运行 sudo systemctl restart httpd
  2. DNS 缓存:您的浏览器或本地系统可能存在 DNS 缓存,尝试清除浏览器缓存,或者在命令行中使用 ipconfig /flushdns (Windows) 或 sudo dscacheutil -flushcache (macOS) 刷新本地 DNS 缓存。
  3. hosts 文件配置错误:如果您在本地测试,请再次检查本地 hosts 文件中的 IP 地址和域名是否对应正确,且没有拼写错误。
  4. 防火墙或 SELinux:服务器的防火墙(如 firewalld)或 SELinux 可能会阻止访问,请确保 80 端口已开放,SELinux 的上下文允许 Apache 访问网站目录,可以使用 sudo setsebool -P httpd_can_network_connect 1 临时测试 SELinux 是否为问题所在。

除了基于域名,Apache 还支持其他类型的虚拟主机吗?如何配置?

解答: 是的,Apache 主要支持三种类型的虚拟主机:

  1. 基于域名:这是我们本文介绍的最常用方式,通过不同的 ServerName 来区分网站,多个网站共享同一个 IP 地址。
  2. 基于 IP 地址:需要为服务器配置多个 IP 地址,每个虚拟主机绑定一个独立的 IP,配置时,<VirtualHost> 指令后跟具体的 IP 地址,如 <VirtualHost 192.168.1.101:80>
  3. 基于端口:所有网站共享同一个 IP 地址,但使用不同的端口号,首先需要在主配置文件或 conf.d 目录下的文件中添加 Listen 指令(如 Listen 8080),然后在 <VirtualHost> 指令中指定端口,如 <VirtualHost *:8080>,访问时需要在域名后加上端口号,如 http://example1.com:8080

对于大多数个人和中小企业场景,基于域名的虚拟主机是最灵活和经济的方案。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.