如何在 CentOS 8 上使用虚拟主机安装 Apache
Apache Web 服务器是一种开源且流行的 HTTP Web 服务器,在托管行业中继续享有巨大的市场份额。它附带了大量功能,包括模块增强、多协议支持、简化配置和多语言支持等等。
另请阅读:如何在 CentOS 8 上安装 Nginx
在本指南中,我们将引导您通过虚拟主机环境在 CentOS 8 和 RHEL 8 上安装 Apache 网络服务器。在撰写本教程时,Apache 的最新版本是 Apache 2.2.43。
安装 Apache Web 服务器
首先,首先使用以下 dnf 命令更新您的 CentOS 8 或 RHEL 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-available
和 sites-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 8 和 RHEL 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 8 和 RHEL 8 上安装 Apache Web 服务器,以及如何配置虚拟主机文件为额外的域提供内容。您可以随意配置多个虚拟主机文件,以适应其他域。
如果您想设置完整的托管堆栈,我建议您在 CentOS 8 上安装 LAMP 堆栈。