网站搜索

如何在 CentOS 8 上使用虚拟主机安装 Apache


Apache Web 服务器是一种开源且流行的 HTTP Web 服务器,在托管行业中继续享有巨大的市场份额。它附带了大量功能,包括模块增强、多协议支持、简化配置和多语言支持等等。

另请阅读:如何在 CentOS 8 上安装 Nginx

在本指南中,我们将引导您通过虚拟主机环境在 CentOS 8RHEL 8 上安装 Apache 网络服务器。在撰写本教程时,Apache 的最新版本是 Apache 2.2.43

安装 Apache Web 服务器

首先,首先使用以下 dnf 命令更新您的 CentOS 8RHEL 8 系统软件包列表。

sudo dnf update

更新完成后,通过执行以下命令安装 Apache 网络服务器。

sudo dnf install httpd

安装后,您可以通过运行 rpm 命令来验证 Apache 的版本。

rpm -qi httpd

该命令打印出一系列信息,例如包的版本、发布日期、构建和架构。

要启动 Apache HTTP Web 服务,请运行 systemctl 命令。

sudo systemctl start httpd

要确认服务是否正在运行,请执行。

sudo systemctl status httpd

从输出中,绿色的“活动”状态表示 Apache Web 服务器已启动并正在运行。

要消除对网络服务器正在运行的任何疑问,请通过浏览服务器的 IP 地址或域名向 Apache 请求测试页面,如下所示。

http://server-ip  

您可以通过运行 ifconfig 命令获取您的服务器 IP。如果您的服务器托管在云端,您可以通过curl命令获取公网IP。

curl ifconfig.me 
OR
curl -4 icanhazip.com

当您浏览服务器的 IP 地址时,您应该会显示以下网页。

这是网络服务器正在运行的明确确认。

管理 Apache Web 服务器

安装并运行Apache后,您可以使用systemctl检查工具来管理Apache。

例如,要停止 Apache,请运行以下命令:

sudo systemctl stop httpd

要再次启动服务,请执行:

sudo systemctl start httpd

如果您对其任何配置文件进行了更改并且需要重新启动以应用更改,请执行以下命令:

sudo systemctl restart httpd

重新启动服务通常会导致服务中断。更好的选择是简单地重新加载,而不会中断连接。

sudo systemctl reload httpd

要在引导或重新引导时自动启动 Apache Web 服务器,请运行以下命令。这将确保 Apache 自动启动而无需您的干预。

sudo systemctl enable httpd

如果您选择不在启动时自动启动该服务,请运行:

sudo systemctl disable httpd

设置 Apache 虚拟主机

默认情况下,Apache Web 服务器配置为仅服务或托管一个网站。如果您只想托管一个网站,则不需要此步骤。但如果您计划在服务器上托管多个域,则需要配置 Apache 虚拟主机。

虚拟主机是一个单独的文件,其中包含允许您设置与默认域不同的域的配置。在本指南中,我们将为 crazytechgeek.info 域设置一个虚拟主机。

默认虚拟主机位于 /var/www/html 目录。这仅适用于单个站点。要为我们的域创建单独的虚拟主机,我们将在 /var/www 目录中创建另一个目录结构,如图所示。

sudo mkdir -p /var/www/crazytechgeek.info/html

此外,您还可以创建一个目录来存储日志文件。

sudo mkdir -p /var/www/crazytechgeek.info/log

接下来,使用 $USER 环境变量编辑文件权限,如下所示。

sudo chown -R $USER:$USER /var/www/crazytechgeek.info/html

另外,如图所示调整 webroot 目录的权限。

sudo chmod -R 755 /var/www

接下来,创建一个示例 index.html 文件,如图所示。

sudo vim /var/www/crazytechgeek.info/html/index.html

在键盘上敲击字母 'i' 并粘贴一些示例内容,如图所示,这些内容将在测试虚拟主机时显示在 Web 浏览器上。

<html>
  <head>
    <title>Welcome to crazytechgeek.info!</title>
  </head>
  <body>
    <h1>Success! The crazytechgeek.info virtual host is up and perfectly working!</h1>
  </body>
</html>

保存并退出配置文件。

创建示例索引文件和站点目录后,您现在可以继续创建虚拟主机文件。虚拟主机文件将包含您域的站点配置并指示 Apache 如何响应客户端的请求。

虚拟主机文件将包含您域的站点配置并指示 Apache 如何响应客户端的请求。但继续,您需要创建 2 个目录:sites-availablesites-enabled 目录。

虚拟主机文件将存储在 sites-available 目录中,而 sites-enabled 该目录将包含虚拟主机的符号链接。

创建两个目录,如图所示。

sudo mkdir /etc/httpd/sites-available
sudo mkdir /etc/httpd/sites-enabled

接下来,修改 Apache Web 服务器的主配置文件并指示 Apache 在启用站点的目录中找到虚拟主机的位置。

sudo vim /etc/httpd/conf/httpd.conf

附加该行,如配置文件末尾所示。

IncludeOptional sites-enabled/*.conf

保存并退出。

现在创建一个虚拟主机文件,如下所示:

sudo vim /etc/httpd/sites-available/crazytechgeek.info

粘贴下面的内容,并将 crazytechgeek.info 替换为您自己的域名。

<VirtualHost *:80>
    ServerName www.crazytechgeek.info
    ServerAlias crazytechgeek.info
    DocumentRoot /var/www/crazytechgeek.info/html
    ErrorLog /var/www/crazytechgeek.info/log/error.log
    CustomLog /var/www/crazytechgeek.info/log/requests.log combined
</VirtualHost>

保存并退出文件。

现在,通过在 sites-enabled 目录中创建符号链接来启用虚拟主机文件。

sudo ln -s /etc/httpd/sites-available/crazytechgeek.info.conf /etc/httpd/sites-enabled/crazytechgeek.info.conf

调整虚拟主机的 SELinux 权限

CentOS 8RHEL 8 附带 SELinux,这是一个用于增强 Linux 系统安全性的安全模块。由于您在上一步中配置了自定义 log 目录,因此您需要更新一些 SELinux 策略以指示 Apache Web 服务器写入该目录。

调整SELinux Apache策略有2种方法:全局调整策略和目录策略。优选后者,因为它更优选。

调整目录上的 SELinux 策略

编辑日志目录的 SELinux 权限使您可以绝对控制 Apache 的网络服务器的策略。此方法相当冗长,需要您为虚拟主机配置文件中指定的其他目录手动配置上下文类型。

在开始之前,首先确认 SELinux 分配给日志目录的上下文类型:

sudo ls -dlZ /var/www/crazytechgeek.info/log/

输出应该类似于下面的内容。

从输出来看,设置的上下文是httpd_sys_content_t。这表明Web服务器只能读取日志目录中的文件。您需要将此上下文更改为 httpd_log_t 以使 Apache 能够生成日志条目并将其添加到目录中。

因此,执行命令:

sudo semanage fcontext -a -t httpd_log_t "/var/www/crazytechgeek.info/log(/.*)?"

如果您碰巧收到以下错误“semanage:找不到命令”。

这意味着未安装为 semanage 命令提供的软件包。要修复此错误,您需要安装这些软件包。但首先,通过运行以下命令检查哪些软件包提供了 semanage 命令:

sudo dnf whatprovides /usr/sbin/semanage

输出为我们提供了提供语义管理的包,即policycoreutils-python-utils

现在使用 DNF 包管理器安装如图所示的包。

sudo dnf install policycoreutils-python-utils

用于更改上下文的命令现在应该可以工作。

sudo semanage fcontext -a -t httpd_log_t "/var/www/crazytechgeek.info/log(/.*)?"

要保存更改并使其持久化,请发出 restorecon 命令,如下所示:

sudo restorecon -R -v /var/www/crazytechgeek.info/log

您可以通过再次运行命令来确认更改:

sudo ls -dlZ /var/www/crazytechgeek.info/log/

请务必注意,如输出中所示,上下文类型已更改为 httpd_log_t

重新启动 Apache 以使更改生效。

sudo systemctl restart httpd

现在,您可以通过列出其内容来确认 Apache 是否正在日志目录中保存日志文件,如下所示:

ls -l /var/www/crazytechgeek.info/log/

您应该能够看到两个日志文件,如图所示:错误日志和请求日志文件。

测试 Apache 虚拟主机

最后,您需要确保 Apache Web 服务器正在为您的虚拟主机文件提供服务。为此,请打开浏览器并转到服务器的 IP 地址或域名:

http://domain-name

完美的!这表明一切顺利,我们的虚拟主机正在按预期提供服务。

结论

在本指南中,我们学习了如何在 CentOS 8RHEL 8 上安装 Apache Web 服务器,以及如何配置虚拟主机文件为额外的域提供内容。您可以随意配置多个虚拟主机文件,以适应其他域。

如果您想设置完整的托管堆栈,我建议您在 CentOS 8 上安装 LAMP 堆栈。