如何配置 Apache CentOS 7 上的虚拟主机

今天,我们将回顾如何配置 Apache CentOS 7 VPS 服务器或专用服务器上的虚拟主机。 如果您托管网站,那么您很可能托管了多个网站。 如果是这样,了解这些虚拟主机的工作方式和原因应该可以让您更好地理解为什么需要它们。 默认情况下, Apache 只能为所有请求托管一个文档根目录,这可能不是您想要发生的。

我们可以使用 VirtualHost 块将命名域转换为其适当的文档根,并根据需要为每个块添加新设置。 但是,一个有效的 VirtualHost 是什么? 它应该存放在哪里?

飞行前检查

在本文中,我们将使用 Core-Managed CentOS 7 VPS,它带有全新安装的 Apache 2.4. CentOS 6 和非托管 CentOS 7 服务器的说明类似,具有相同的 Apache 版本。 我们以 root 用户身份通过​​ SSH 连接到我们的服务器。

第 1 步:设置 Apache

Apache 将被配置为托管多个站点,所以这里没有太多可做的。 从历史上看(也就是说,在 Apache 2.2), NameVirtualHost 是必须告诉 Apache 我们想使用虚拟主机块来托管多个站点。 由于这是一个流行的选项,因此现在默认情况下处于启用状态 Apache 2.4,所以我们没有任何额外的配置要做。 但是,我们确实想确保 Apache 已启用并将在启动时启动。

systemctl enable httpd
systemctl start httpd

这两个命令应该没有输出。 如果他们确实有输出,则有警告或错误,您可以通过运行查看详细信息:

systemctl status httpd

Apache 现在已启动并运行并准备托管站点!

第 2 步:添加文档根目录

我们现在需要添加一些域 Apache. 让我们设置两个新的文档根文件夹,一个在 /var/www/domain.com/,一个在 /var/www/domain.net。

mkdir -p /var/www/domain.net
mkdir -p /var/www/domain.com

现在,您可以开始向每个文件夹添加独特的内容。 添加一个基本的 index.html 文件,说明您正在加载的域,因为这将有助于我们稍后检查我们的工作。

mkdir -p /var/www/domain.net
mkdir -p /var/www/domain.com

如果你有担保 Apache 要在不同的用户下运行,您应该更新所有权和权限。 除此以外, Apache 将以具有根文件所有权的根身份运行。

第 3 步:添加虚拟主机文件

现在我们有了要托管的网站,我们需要告诉 Apache 关于他们。 我们将为每个域创建一个新文件,以便我们可以启用或禁用(或添加和删除)下一行。 将以下内容写入 /etc/httpd/conf.d/domain.com.conf 中的文件:

让我们分解这些线。

第一行打开了我们的 VirtualHost 块,并定义了我们将为这个指令监听的 IP 地址和端口。 星号标识服务器上的所有 IP,端口 80 为非 SSL 端口,因为我们还没有 SSL。

VirtualHost 块中唯一需要的两行是 ServerName 和 DocumentRoot。 这些告诉 Apache 要侦听哪些入站域请求,以及为这些请求提供服务的文件夹。

ServerAlias 可以描述应该为同一文档根目录提供服务的其他域,这很方便,例如 WordPress 多站点安装。

ErrorLog 行告诉 Apache 在哪里存储与加载此域相关的错误。 单个唯一文件可以分隔每个域的日志,例如 domain.com.error.log。

带有“组合”选项的 CustomLog 将记录此域的所有访问请求。 在对发出请求时发生的问题进行故障排除时,此日志也特别有用。 此外,这对于跟踪哪些 IP 正在访问您的站点非常有用。

其他虚拟主机选项

您可以将其他有用的行添加到您的 VirtualHost 块中:

  • ServerAdmin 声明网站管理员的电子邮件地址,并在遇到错误时提供给访问者。 其他选项也可以在这里设置; 就像在 .htaccess 文件中一样,我们可以关闭索引页面或符号链接。
  • 可以在 VirtualHost 中启用 RewriteEngine
  • 此外,重写的其他条件和规则

您可以放入 .htaccess 文件中的几乎所有内容也可以放入 VirtualHost 配置文件中。 现在我们已经为 domain.com 设置了一个 VirtualHost,以同样的方式为 domain.net 创建另一个。

第 4 步:测试并重新启动 Apache

写入文件后,我们可以运行配置测试:

httpd -t

如果没有发现问题,t他的命令将返回 以下输出。

Syntax OK

一世如果有问题,httpd 命令应该告诉我们是哪一行,以及什么文件引起了关注。 现在我们可以将配置重新加载到 Apache.

systemctl reload httpd

同样,如果重新加载成功,此命令将没有输出。 我们可以通过运行来确认我们加载了 VirtualHosts:

root@host [~]# httpd -S
 VirtualHost configuration:
 127.0.0.1:80  host.server.com (/etc/apache2/conf/httpd.conf:305)
 127.0.0.1:443 host.server.com (/etc/apache2/conf/httpd.conf:3726)
 67.227.197.126:80  is a NameVirtualHost 
default server host.server.com (/etc/apache2/conf/httpd.conf:327)
port 80 namevhost host.server.com (/etc/apache2/conf/httpd.conf:327)
port 80 namevhost domain.com (/etc/apache2/conf/httpd.conf:390)
            alias mail.domain.com
            alias www.domain.com

该命令的输出将显示 Apache的当前运行配置,包括已加载的 VirtualHost 块。

您应该在该行的开头看到两个显示“*:80”的条目,它们是 domain.com 和 domain.net。 您还将在括号中看到从中加载 VirtualHost 的配置文件。

如果您已经为域设置了 DNS 条目,您现在可以在浏览器中访问这些域,您将看到我们之前编写的两个 index.html 文件。 如果您还没有设置 DNS,您可以在工作站上使用主机文件修改进行测试。

完成的! 现在我们的 VirtualHosts 已经完成并正在运行,我们可以继续配置我们的网站、保护我们的服务器或为新安装的域设置 SSL。

我们随时为您提供帮助!

您还有其他想法或顾虑吗? 如果是这样,Liquidweb 支持团队可以提供帮助。 只需立即通过 [email protected] 向我们开票,拨打 1-800-580-4985 联系我们,或者通过以下方式联系我们 聊天 今天就与我们的一位 3 级支持管理员交谈!