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

介绍

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

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

前提条件

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

步骤 1 - 安装 Apache

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

当非 root sudo 用户在前提条件中配置时,更新本地 Apache httpd 包索引以反映最新的上游变化:

1sudo yum update httpd

更新后,安装 Apache 包:

1sudo yum install httpd

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

如果您完成了前提部分中提到的 新 CentOS 7 服务器的附加推荐步骤指南,您将安装防火墙在您的服务器上,您需要打开端口80,以允许 Apache 通过 HTTP 服务请求。

1sudo firewall-cmd --permanent --add-service=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]
 2Redirecting to /bin/systemctl status httpd.service
 3 httpd.service - The Apache HTTP Server
 4   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
 5   Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago
 6     Docs: man:httpd(8)
 7           man:apachectl(8)
 8 Main PID: 1290 (httpd)
 9   Status: "Processing requests..."
10   CGroup: /system.slice/httpd.service
11           ├─1290 /usr/sbin/httpd -DFOREGROUND
12           ├─1291 /usr/sbin/httpd -DFOREGROUND
13           ├─1292 /usr/sbin/httpd -DFOREGROUND
14           ├─1293 /usr/sbin/httpd -DFOREGROUND
15           ├─1294 /usr/sbin/httpd -DFOREGROUND
16           └─1295 /usr/sbin/httpd -DFOREGROUND
17...

正如你可以从这个输出中看到的那样,该服务似乎已经成功启动,但是,测试这一点的最佳方法是请求来自Apache的页面。

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

在您的服务器的命令提示中输入:

1hostname -I

此命令将显示所有主机的网络地址,因此您将获得几个以空间分开的IP地址,您可以尝试在您的Web浏览器中查看它们是否有效。

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

1curl -4 icanhazip.com

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

1http://your_server_ip

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

Default Apache page for CentOS 7

此页面表明Apache正在正常工作,还包含有关重要Apache文件和目录位置的一些基本信息,现在服务已安装并运行,您现在可以使用不同的systemctl命令来管理该服务。

步骤 3 – 管理 Apache 流程

现在你有你的Web服务器并运行,让我们来谈谈一些基本的管理命令。

要停止您的 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 网页服务器时,您可以使用 virtual hosts (类似于 Nginx 中的服务器块) 来封装配置细节并从单个服务器中托管多个域名. 在此步骤中,您将设置一个被称为 your_domain 的域名,但您应该用自己的域名来代替。

CentOS 7上的Apache有一个默认启用的服务器块,它配置为从/var/www/html目录中服务的文档。虽然这对单个网站非常有效,但如果您托管多个网站,它可能会变得不方便。而不是修改/var/www/html,您将为您的_域网站创建一个/var/www中的目录结构,如果客户端请求不匹配任何其他网站,则将/var/www/html作为默认目录提供。

p旗创建your_domainhtml目录,以以下方式创建任何必要的母目录:

1sudo mkdir -p /var/www/your_domain/html

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

1sudo mkdir -p /var/www/your_domain/log

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

1sudo chown -R $USER:$USER /var/www/your_domain/html

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

1sudo chmod -R 755 /var/www

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

1sudo vi /var/www/your_domain/html/index.html

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

1[label /var/www/your_domain/html/index.html]
2<html>
3  <head>
4    <title>Welcome to your website!</title>
5  </head>
6  <body>
7    <h1>Success! The your_domain 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在网站启用目录中搜索虚拟主机. 要做到这一点,编辑Apache的主要配置文件,并添加一行声称为额外配置文件的可选目录:

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

将此行添加到文件的末尾:

1IncludeOptional sites-enabled/*.conf

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

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

1sudo vi /etc/httpd/sites-available/your_domain.conf

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

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

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

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

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

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

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

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

由于您在虚拟主机配置文件中设置了自定义日志目录,如果您尝试启动 Apache 服务,您将收到错误消息。 要解决此问题,您需要更新 SELinux 策略以允许 Apache 写入所需的文件。 SELinux 为您的 CentOS 7 环境带来了增强的安全性,因此不建议完全禁用内核模块。

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

普遍调整 Apache 策略

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

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

1sudo setsebool -P httpd_unified 1

「setsebool」命令會改變 SELinux 布爾值. 「-P」旗會更新啟動時間值,使此變更在重啟中持續存在。

在目录中调整 Apache 策略

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

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

1sudo ls -dZ /var/www/your_domain/log/

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

1[secondary_label Output]
2drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/log/

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

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

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

1sudo restorecon -R -v /var/www/your_domain/log

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

1[secondary_label Output]
2restorecon reset /var/www/your_domain/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

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

1sudo ls -dZ /var/www/your_domain/log/

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

1[secondary_label Output]
2drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/your_domain/log

现在‘/var/www/your_domain/log’目录正在使用‘httpd_log_t’类型,您已经准备好测试您的虚拟主机配置。

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

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

1sudo systemctl restart httpd

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

1ls -lZ /var/www/your_domain/log

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

1[secondary_label Output]
2-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log
3-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log

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

Success! The example.com virtual host is working!

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

结论

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

如果您想构建一个更完整的应用程序堆栈,您可以查看有关如何在CentOS 7上配置LAMP堆栈的这篇文章(https://andsky.com/tech/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7#step-four-%E2%80%94-test-php-processing-on-your-web-server)。

Published At
Categories with 技术
Tagged with
comments powered by Disqus