返回博客

在 CentOS 7 上安装 Apache Web 服务器

在 CentOS 7 上安装 Apache Web 服务器

Web 服务器用于向网站访问者存储、处理和传输网页。目前有相当多的 开源 Web 服务器 软件选项,但 Apache HTTP 服务器 被认为是世界上使用最广泛的 Web 服务器。这是因为,除了开源之外,它的模块化架构还允许通过添加模块来扩展其功能,以满足不同的用途。因此,该 Web 服务器极其健壮。

如果您想在 CentOS 7 系统上安装 Apache,本教程非常适合您。此外,您还将学习如何创建 虚拟主机,以便您可以在运行于 CentOS 的单个 Apache HTTP 服务器上托管多个网站。

这是一个仅专注于 Apache 安装的详细教程。如果您正在寻找关于 LAMP 架构的简明教程,我们有这篇关于 如何在 CentOS 7 上安装 Linux、Apache、MySQL、PHP (LAMP) 的指南供您参考。现在,让我们开始吧!

前提条件

由于这是一个实操教程,您应该具备以下条件:

的教程中的步骤配置基础防火墙

您可以在 CentOS 默认软件源中找到 Apache。因此,使用 yum 包管理器进行安装非常简单。根据前提条件部分,您需要使用非 root 用户登录。在终端中运行以下命令以更新本地 Apache httpd 包索引:

软件包更新后,输入以下命令安装 Apache:

确认安装并等待 yum 安装 Apache 及其所需的依赖项。

如果您按照关于 在 CentOS 7 上使用 FirewallD 设置防火墙 的教程中的步骤操作,并启用了 80 端口的防火墙,那么您就可以继续了。 Firewalld 是 CentOS 的防火墙管理器。否则,您可以通过输入以下命令来启用 firewalld 的 http(80 端口)服务:

如果您计划通过安全的 HTTPS 传输流量,则可以通过输入以下命令来启用 firewalld 的 https(443 端口)服务:

最后,您必须重新加载 firewalld 以使更改生效。以下是重新加载的命令:

至此,您已经安装并配置了 Apache,以通过 HTTP 或 HTTPS(取决于您是否运行了上述命令)来传输流量。

第 2 步:确认 Apache Web 服务器正在运行

在 CentOS 中,Apache 进程在安装后不会自动启动。要手动启动 Apache,请输入以下命令:

要验证服务是否成功启动,请通过输入以下命令来检查状态:

如果服务正在运行,您应该会看到类似于下方截图的输出。请注意 active(活动)状态:

httpd status

输出表明服务已成功启动并且正在运行。接下来,我们还必须测试 Apache 是否可以向互联网用户提供页面。Apache 附带一个默认页面,您可以使用它来测试是否可以通过互联网访问您的服务器。

如果您还没有服务器的公网 IP 地址,则需要找到它。您将在浏览器的地址栏中使用此 IP 地址来请求默认的 Apache 网页。您可以通过输入以下命令来显示主机的网络地址:

从获取的地址列表中,您可以在浏览器中尝试每一个以确认它们是否正常工作。或者,您也可以使用 curl 来从 icanhazip.com 获取您的 IP 地址。下面的命令会输出从另一个互联网位置的计算机上看到的您的公网 IP 地址:

一旦您获取了服务器的公网 IP 地址,请将其复制并粘贴到浏览器的地址栏中:

您的浏览器应该会加载默认的 CentOS 7 Apache 网页:

web server home page

如果您能够加载默认的 Apache 网页,则意味着您的服务器工作正常。如果您向下滚动,可以看到一些关于 Apache 文件和目录位置的基本信息。在服务安装并正常运行后,您应该能够使用各种 systemctl 命令来管理该服务。

步骤 3:管理 Apache 服务

在本节中,我们将向您展示一些基本的 Apache 管理命令。以下是停止 Web 服务器的命令:

以下是启动 Web 服务器的命令:

接下来,这是重启 Web 服务器(停止并启动)的命令:

在此之后,我们将向您展示重新加载 Apache 服务的命令。当您只是进行配置更改时,此命令是必需的。通过重新加载,Apache 进程将应用配置更改,而不会像重启那样断开连接:

根据默认配置,Apache 会在服务器启动时自动启动。如果您想更改此行为,以下是禁用该服务开机自启的命令:

要重新启用该服务开机自启,请输入以下命令:

步骤 4:设置 Apache 虚拟主机

默认情况下,Apache 配置为托管和提供单个网站。在大多数情况下,您会希望您的 Web 服务器托管和提供多个网站。例如,您可能拥有子域名,或者您可能想为您的主要公司/组织网站设置一个博客页面。这就是 Apache 虚拟主机发挥作用的地方。Apache 虚拟主机使您能够配置 Web 服务器以提供多个网站。Apache 虚拟主机相当于 Nginx server

在本教程中,我们将向您展示如何使用 example.com 作为我们的域名。当然,example.com 域名在互联网上无法正常工作,因此您应该将其替换为您的实际域名——步骤是相同的。

当您在 CentOS 上安装 Apache 时,它会安装一个虚拟主机,该虚拟主机配置为从 /var/www/html 目录提供内容。如果您托管单个网站,这种设计效果很好。但是,我们希望能够托管多个网站。我们将保留默认的 /var/www/html 目录,而是在 /var/www 位置中为 example.com 域名创建另一个目录。保留默认目录的原因是,当客户端请求与您配置了虚拟主机的任何其他网站都不匹配时,它将提供服务。此外,如果您想禁用已创建的虚拟主机,默认目录仍将继续处理流量。

首先,在 /var/www 中为您的域名创建一个目录。您可以自由选择自己喜欢的名称。但是,建议选择一个与您的域名相似的名称,以便在创建虚拟主机 conf 文件时易于记忆。输入以下命令创建示例目录:

输入以下命令创建另一个用于存放该网站日志文件的文件夹:

网站目录就绪后,使用以下命令通过 $USER 环境变量分配该目录的所有权:

运行以下命令以确保您的 Web 根目录具有默认权限:

现在,创建一个简单的 index.html 页面,在 example 目录中使用 nano,输入以下命令:

在 nano 编辑器中,添加以下 HTML 代码片段:

完成后,按 Ctrl O 并按 ENTER 保存文件。现在您可以按 Ctrl X

到目前为止,我们已经有了您的网站目录和用于测试虚拟主机的基本网页。接下来,我们要创建虚拟主机配置文件。虚拟主机文件指定了您想在单个 Apache 服务器上托管的各个网站的配置。它们将设置的域名请求引导至其特定目录。

虚拟主机文件存储在目录 /etc/httpd/sites-available 中。已激活的虚拟主机文件通过符号链接从 /etc/httpd/sites-available 目录链接到 /etc/httpd/sites-enabled 目录。在 CentOS 中,默认情况下不会创建这两个目录,因此您必须自己创建它们。输入以下命令以创建这些目录:

目录创建完成后,指示 Apache 在 sites-enabled 目录中寻找虚拟主机。您将通过修改 Apache 的主配置文件来实现这一点。输入以下命令以在 nano 编辑器中打开该文件:

我们要添加一行,指示 Apache 在可选目录中寻找其他配置文件。滚动到文件底部,并在末尾添加以下行:

Ctrl O 并按 ENTER 保存文件。现在您可以按 Ctrl X 关闭编辑器。下一步是在 sites-available 目录中创建虚拟主机文件。输入以下命令以使用 nano 编辑器创建并打开新文件:

在打开的文件中,添加以下配置块。请记得将我们的 example.com 替换为您实际的域名,如果您在 /var/www/example 中使用了不同的目录名称,也请进行相应更新:

如您所见,我们已经指定了域名以及用于存放该域名服务的文件的文档根目录。我们还指定了错误日志的位置——这将在您进行服务器故障排除时提供帮助。

一旦我们在 sites-available 目录中有了虚拟主机文件,下一步就是通过创建指向 sites-enabled 目录的符号链接来启用该文件。输入以下命令以创建符号链接:

如果您已按照上述步骤操作,那么您的虚拟主机现在应该已经准备好提供网站内容了。但是,在虚拟主机开始工作之前,您还需要配置一项检查。我们接下来将介绍这一点。 

第 5 步:调整 SELinux 权限以允许虚拟主机

包括 Fedora、RHEL 和 CentOS 在内的 Linux 发行版默认都带有 SELinux。 SELinux (安全增强型 Linux) 是 Linux 系统的一种安全架构,它限制并定义了服务器应如何处理请求,以及用户应如何与套接字、网络端口和基本目录进行交互。 

开箱即用,SELinux 可以与默认的 Apache 配置协同工作。但是,对于您创建的自定义虚拟主机(包括自定义日志目录),当您尝试重新启动 Apache 服务时,系统会抛出服务错误。解决方案是修改 SELinux 策略,以允许 Apache 服务写入必要的文件。 

SELinux 使 CentOS 成为一个高度安全的服务器。因此,我们不建议完全禁用它。鉴于 SELinux 允许您以各种方式自定义安全级别,建议您仅根据环境需求更新或设置策略。

您有两种更新 Apache 策略的选择:要么全局,要么针对特定目录。更新针对特定目录的策略更安全。因此,这是推荐的选择。 

  • 全局更新 Apache 策略

您可以通过使用 httpd_unified 布尔值来全局修改 Apache 策略,这将指示 SELinux 相同地对待所有 Apache 进程。请记住,全局修改 Apache 策略不会给您带来与针对每个目录进行特定设置相同的控制级别。但是,在维护方面它更方便。运行以下命令来全局更新 Apache 策略: 

让我们定义一下这个命令中的值的作用:

  • setsebool – 更新 SELinux 布尔值。 
  • -P 标记  – 更新启动时加载的值,以便此更改在重启后依然有效。 
  • httpd_unified  – 指示 SELinux 将所有 Apache 进程视为相同类型的布尔值。使用值 1 启用它。 
  • 调整目录上的 Apache 策略

如果您想对目录进行更多控制,那么针对每个目录调整 Apache 策略是正确的方法。但是,这会带来需要更多维护的开销。这是因为该策略不是全局的。因此,您需要为您在虚拟主机 conf 文件中指定的任何新日志目录手动设置上下文类型。 

在更新策略之前,首先使用以下命令检查 SELinux 分配给 /var/www/example/log 目录的上下文类型:

该命令将输出类似于以下内容的信息,这基本上就是该目录的 SELinux 上下文:

httpd_sys_content_t 是当前的上下文,它告诉 SELinux,Apache 进程仅被允许读取在此目录中创建的文件。由于根据我们的虚拟主机配置,我们希望 Apache 能够向 /var/www/example/log 目录中的日志文件写入内容,因此我们将修改此策略以允许 Apache 生成并追加到 Web 应用程序日志文件。允许这样做的上下文是 httpd_log_t。以下是更新上下文的命令:

要应用上述命令的更改并使其在重启后依然有效,请执行以下命令:

让我们定义一下该命令的作用:

  • restorecon – 应用更改并确保它们在重启后持久存在。
  • -R 标志 – 将递归运行该命令,更新任何现有文件以使用新上下文。
  • -v 标志 – 在命令运行后打印上下文更改。它将输出类似以下内容:
要查看上下文更改,您可以再次运行以下命令:
您应该在输出中看到更新后的上下文类型:
随着 SELinux 目录策略已更新以允许 Apache 写入日志目录,我们现在可以测试虚拟主机了。 

第 6 步:测试虚拟主机配置

在测试虚拟主机之前,您需要重启 Apache 服务。以下是相应的命令:

接下来,使用以下命令列出日志目录的内容:

它应该显示类似以下的内容,表明 Apache 已经创建了日志文件: 

list log files web server

如果您一直按照上述步骤操作,那么当您访问虚拟主机文件中定义的域名时,Apache 现在应该能够提供示例 HTML 页面。如果您愿意,可以重复步骤 4 和 5 来设置其他域名并相应地更新其 SELinux 权限。

结论

在本教程中,我们安装了 Apache,学习了如何更新 SELinux 策略以允许 Apache 写入自定义日志文件,并最终测试了我们的配置以确认其正常工作。有了这些背景知识,您应该能够在此基础上进行构建,并提供具有更丰富体验的更好应用。 

如果您想探索完整的 Web 技术栈,请查看我们的 关于 如何在 CentOS 7 上安装 LAMP 架构的教程

祝您使用愉快!

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。