如何在CentOS 8上安装带有虚拟主机的Apache

Apache Web服务器是一款开源且流行的HTTP Web服务器,在托管行业仍然拥有大量市场份额。它具有许多功能,包括模块增强、多协议支持、简化配置和多语言支持等。

阅读更多: 如何在CentOS 8上安装Nginx

在本指南中,我们将带领您在CentOS 8RHEL 8 上安装Apache 2.2.43的Web服务器,并创建一个虚拟主机环境。在撰写本教程时,最新版本的Apache是Apache 2.2.43

安装Apache Web服务器

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

$ sudo dnf update

更新完成后,执行以下命令安装Apache Web服务器。

$ sudo dnf install httpd

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

$ rpm -qi httpd
Verify Apache Version

该命令将打印出版本、发布日期、构建和软件包的架构等一系列信息。

要启动Apache HTTP网络服务,请运行systemctl命令

$ sudo systemctl start httpd

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

$ sudo systemctl status httpd
Verify Apache Service Status

从输出中,‘active’状态显示为绿色,表明Apache网络服务器正在运行。

为了消除对网络服务器是否在运行的任何疑问,通过浏览您服务器的IP地址或如图所示的域名来请求Apache的测试页面。

http://server-ip  

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

$ curl ifconfig.me 
OR
$ curl -4 icanhazip.com
Find CentOS Server IP Address

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

Check Apache Webpage

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

管理Apache网络服务器

安装并运行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虚拟主机。

A virtual host is a separate file that contains configurations that allow you to set up a separate domain from the default one. For this guide, we will set up a virtual host for the domain 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网页服务器的主配置文件,并指示Apache在`sites-enabled`目录内定位虚拟主机。

$ 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 系统安全性的安全模块。由于您在上一步中配置了自定义 日志 目录,您需要更新一些 SELinux 策略,以指示 Apache Web 服务器写入该目录。

调整 SELinux Apache 策略有两种方法:调整全局策略和目录策略。后者更受欢迎,因为它更受欢迎。

调整目录上的 SELinux 策略

编辑 SELinux 权限以控制 Apache Web 服务器的策略。这种方法非常冗长,需要您手动为虚拟主机配置文件中指定的其他目录配置上下文类型。

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

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

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

Set SELinux Policies on Apache Log Directory

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

因此,执行以下命令:

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

如果您遇到以下错误“semanage: command not found”。

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

$ sudo dnf whatprovides /usr/sbin/semanage

输出会给出提供 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/
Check SELinux Context Type

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

重新启动 Apache 以应用更改。

$ sudo systemctl restart httpd

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

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

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

Check Apache Log Files

测试 Apache 虚拟主机

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

http://domain-name
Check Apache Virtual Host for Website

完美!这表明一切顺利,我们的虚拟主机正如预期的那样被服务。

结论

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

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

Source:
https://www.tecmint.com/install-apache-with-virtual-host-on-centos-8/