如何在 CentOS 8 上安装 Apache 网络服务器

介绍

HTTP服务器是世界上最广泛使用的Web服务器,它提供了许多强大的功能,包括动态可加载的模块,强大的媒体支持,以及与其他流行的软件的广泛集成。

在本指南中,您将在 CentOS 8 服务器上安装具有虚拟主机的 Apache Web 服务器。

前提条件

您将需要以下内容来完成本指南:

步骤 1 - 安装 Apache

Apache在CentOS的默认软件存储库中可用,这意味着您可以使用dnf包管理器安装它。

作为非 root sudo 用户在前提条件中配置的,安装 Apache 包:

1sudo dnf install httpd

确认安装后,DNF 将安装 Apache 和所有所需的依赖。

通过在前提部分中提到的第4步(CentOS 8初始服务器设置)指南(https://andsky.com/tech/tutorials/initial-server-setup-with-centos-8#step-4-%E2%80%94-setting-up-a-basic-firewall),您将已经在您的服务器上安装了firewalld,以便通过HTTP服务请求。

如果您还计划将Apache配置为通过HTTPS提供内容,您还将通过启用https服务来打开443端口:

1sudo firewall-cmd --permanent --add-service=https

接下来,重新加载防火墙以实施这些新规则:

1sudo firewall-cmd --reload

防火墙重新加载后,您准备启动服务并检查Web服务器。

步骤2 - 检查您的Web服务器

安装完成后,Apache不会在CentOS上自动启动,因此您需要手动启动Apache过程:

1sudo systemctl start httpd

验证该服务是否使用以下命令运行:

1sudo systemctl status httpd

当服务运行时,您将收到一个活跃状态:

 1[secondary_label Output]
 2 httpd.service - The Apache HTTP Server
 3   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
 4   Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
 5     Docs: man:httpd.service(8)
 6 Main PID: 14219 (httpd)
 7   Status: "Running, listening on: port 80"
 8    Tasks: 213 (limit: 5059)
 9   Memory: 24.9M
10   CGroup: /system.slice/httpd.service
11           ├─14219 /usr/sbin/httpd -DFOREGROUND
12           ├─14220 /usr/sbin/httpd -DFOREGROUND
13           ├─14221 /usr/sbin/httpd -DFOREGROUND
14           ├─14222 /usr/sbin/httpd -DFOREGROUND
15           └─14223 /usr/sbin/httpd -DFOREGROUND
16
17...

正如此输出所表明的,该服务已成功启动,但是,测试这一点的最佳方法是请求来自Apache的页面。

您可以访问默认的 Apache 定位页面,以确认软件通过您的 IP 地址正确运行. 如果您不知道您的服务器的 IP 地址,您可以从命令行获得几种不同的方式。

输入q,返回命令提示,然后输入:

1hostname -I

此命令将显示所有主机的网络地址,因此您将获得几个以空间分开的IP地址。

或者,您可以使用curl来请求您的IP从icanhazip.com,这将为您提供您从互联网上的另一个位置读取的公共IPv4地址:

1curl -4 icanhazip.com

当您有您的服务器的IP地址时,请将其输入到您的浏览器的地址栏:

1http://your_server_ip

您将看到默认的 CentOS 8 Apache 网页:

Default Apache page for CentOS 8

此页面表示 Apache 运行正确,还包含有关重要 Apache 文件和目录位置的一些基本信息。

步骤 3 – 管理 Apache 流程

现在服务已安装并运行,您现在可以使用不同的 systemctl 命令来管理该服务。

要停止您的 Web 服务器,键入:

1sudo systemctl stop httpd

要在停止时启动 Web 服务器,键入:

1sudo systemctl start httpd

要停止,然后重新启动服务,键入:

1sudo systemctl restart httpd

如果您只是在进行配置更改,Apache 通常可以重新加载而不会放弃连接。

1sudo systemctl reload httpd

默认情况下,Apache配置为在服务器启动时自动启动。

1sudo systemctl disable httpd

要重新启用服务在启动时启动,键入:

1sudo systemctl enable httpd

现在,Apache在服务器重新启动时会自动启动。

Apache 的默认配置将允许您的服务器托管单个网站. 如果您计划在您的服务器上托管多个域,则需要在您的 Apache Web 服务器上配置虚拟主机。

步骤 4 — 设置虚拟主机(推荐)

在使用Apache Web 服务器时,您可以使用 virtual hosts(如果您更熟悉 Nginx,这些类似于服务器块)来封装配置细节,并从单个服务器中托管多个域。在此步骤中,您将设置一个名为example.com的域名,但您应该用自己的域名替换。

CentOS 8上的Apache有一个默认启用的虚拟主机,它配置为从/var/www/html目录中服务的文档。虽然这对单个网站来说很好,但如果您托管多个网站,它可能会变得不便。

创建html目录为example.com如下,使用-p旗帜创建任何必要的母目录:

1sudo mkdir -p /var/www/example.com/html

创建一个额外的目录来存储网站的日志文件:

1sudo mkdir -p /var/www/example.com/log

接下来,与$USER环境变量分配html目录的所有权:

1sudo chown -R $USER:$USER /var/www/example.com/html

确保您的 Web 根具有默认权限设置:

1sudo chmod -R 755 /var/www

接下来,使用vi或您最喜欢的编辑器创建一个样本index.html页面:

1sudo vi /var/www/example.com/html/index.html

i,切换到INSERT模式,并将下列样本HTML添加到文件中:

1[label /var/www/example.com/html/index.html]
2<html>
3  <head>
4    <title>Welcome to Example.com!</title>
5  </head>
6  <body>
7    <h1>Success! The example.com virtual host is working!</h1>
8  </body>
9</html>

保存并关闭文件,按ESC,键入:wq,然后按ENTER

有了您的网站目录和示例索引文件,您几乎准备好创建虚拟主机文件,虚拟主机文件指定了您的单独网站的配置,并告诉Apache Web 服务器如何响应各种域请求。

在创建虚拟主机之前,您需要创建一个网站可用目录以存储它们。您还将创建一个网站可用目录,该目录告诉Apache虚拟主机已经准备好为访问者提供服务。

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

接下来,你会告诉Apache在网站启用目录中搜索虚拟主机. 要做到这一点,用vi或你最喜欢的文本编辑器编辑Apache的主要配置文件,并添加一行声明额外配置文件的可选目录:

1sudo vi /etc/httpd/conf/httpd.conf

然后按i切换到INSERT模式,并将下列行添加到文件的尽头:

1[label /etc/httpd/conf/httpd.conf]
2...
3# Supplemental configuration
4#
5# Load config files in the "/etc/httpd/conf.d" directory, if any.
6IncludeOptional conf.d/*.conf
7IncludeOptional sites-enabled/*.conf

保存并关闭文件,当您完成添加该行时. 现在您有您的虚拟主机目录,您将创建您的虚拟主机文件。

首先,在可用网站目录中创建一个新文件:

1sudo vi /etc/httpd/sites-available/example.com.conf

添加以下配置块,并将example.com域名更改为您的域名:

1[label /etc/httpd/sites-available/example.com.conf]
2<VirtualHost *:80>
3    ServerName www.example.com
4    ServerAlias example.com
5    DocumentRoot /var/www/example.com/html
6    ErrorLog /var/www/example.com/log/error.log
7    CustomLog /var/www/example.com/log/requests.log combined
8</VirtualHost>

这会告诉Apache直接在哪里找到可公开访问的Web文档的根,它还会告诉Apache在哪里存储错误和请求该特定网站的日志。

保存并关闭文件,当你完成。

现在你已经创建了虚拟主机文件,你将启用它们,以便Apache知道如何为访问者提供服务。

1sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

您的虚拟主机现在已配置并准备服务内容. 在重新启动 Apache 服务之前,请确保 SELinux 为您的虚拟主机提供正确的策略。

步骤 5 — 调整虚拟主机的 SELinux 权限(推荐)

SELinux是一个 Linux 内核安全模块,为 Linux 系统带来增强的安全性。 CentOS 8 配备了 SELinux 配置以与默认 Apache 配置一起工作。由于您通过在虚拟主机配置文件中设置自定义日志目录来更改默认配置,您将收到一个错误,如果尝试启动 Apache 服务。 要解决此问题,您需要更新 SELinux 策略以允许 Apache 写入所需的文件。

根据环境的需求设置策略有不同的方法,因为SELinux允许您定制您的安全级别. 此步骤将涵盖调整Apache策略的两种方法:普遍和特定目录。

普遍调整 Apache 策略

将 Apache 策略设置为通用,将告诉 SELinux 使用 Boolean 来对待所有 Apache 流程一样,虽然这种方法更方便,但它不会为您提供与专注于文件或目录策略的方法相同的控制水平。

运行以下命令来设置通用 Apache 策略:

1sudo setsebool -P httpd_unified 1

setsebool命令会更改 SELinux Boolean 值. -P 标志会更新启动时值,使此变化在重启中继续存在。

在目录中调整 Apache 策略

单独为 /var/www/example.com/log 目录设置 SELinux 权限将为您提供更多对 Apache 策略的控制,但也可能需要更多的维护。

首先,检查 SELinux 给 /var/www/example.com/log 目录的背景类型:

1sudo ls -dlZ /var/www/example.com/log/

此命令列出并打印了目录的 SELinux 背景. 您将收到类似于以下的输出:

1[secondary_label Output]
2drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

目前的背景是 httpd_sys_content_t,这告诉SELinux,Apache过程只能读取在该目录中创建的文件。 在本教程中,您将更改 /var/www/example.com/log目录的背景类型为 httpd_log_t

1sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

接下来,使用restorecon命令来应用这些更改,并让它们在重启中持续:

1sudo restorecon -R -v /var/www/example.com/log

-R旗将重复执行此命令,这意味着它将更新任何现有文件以使用新背景. -v旗将打印所做的命令的背景变化。

1[secondary_label Output]
2Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0

您可以再次列出背景以查看更改:

1sudo ls -dlZ /var/www/example.com/log/

输出反映了更新的背景类型:

1[secondary_label Output]
2drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

现在,即便使用httpd_log_t类型的/var/www/example.com/log目录,您就可以测试虚拟主机配置了。

步骤 6 — 测试虚拟主机(推荐)

一旦使用任何一种方法更新了 SELinux 背景,Apache 将能够写入 /var/www/example.com/log 目录,您现在可以成功重新启动 Apache 服务:

1sudo systemctl restart httpd

列出 /var/www/example.com/log 目录的内容,看看 Apache 是否创建了日志文件:

1ls -lZ /var/www/example.com/log

您将收到确认Apache能够创建虚拟主机配置中指定的error.logrequests.log文件的确认:

1[secondary_label Output]
2-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
3-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log

现在你已经设置了虚拟主机和更新了 SELinux 权限,Apache 现在将为你的域名提供服务。你可以通过导航到 http://example.com来测试这一点,在那里你应该看到这样的东西:

Success! The example.com virtual host is working!

这确认您的虚拟主机已成功配置并提供内容。重复步骤 4 和步骤 5 以创建额外域的 SELinux 权限的新虚拟主机。

结论

在本教程中,您安装并管理了Apache Web 服务器. 现在您已经安装了您的 Web 服务器,您可以为您提供的内容类型和您可以使用的技术创建更丰富的体验提供了许多选项。

如果您想构建一个更完整的应用程序堆栈,您可以查看有关如何在CentOS 8上配置LAMP堆栈的本文(https://andsky.com/tech/tutorials/how-to-install-linux-apache-mariadb-php-lamp-stack-on-centos-8)。

Published At
Categories with 技术
comments powered by Disqus