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

Apache HTTP服务器是世界上使用最广泛的Web服务器。它提供了许多强大的功能,包括可动态加载的模块,强大的媒体支持以及与其他流行软件的广泛集成。 在本指南中,我们将解释如何在CentOS 7服务器上安装Apache Web服务器。

介绍

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

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

先决条件

您需要以下内容才能完成本指南:

第1步 - 安装Apache

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

作为先决条件中配置的非root sudo用户,更新本地Apache httpd包索引以反映最新的上游更改:

sudo yum update httpd

更新软件包后,安装Apache软件包:

sudo yum install httpd

确认安装后, yum将安装Apache和所有必需的依赖项。 安装完成后,即可开始服务。

第2步 - 检查Web服务器

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

sudo systemctl start httpd

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

sudo systemctl status httpd

服务运行时,您将看到active状态:

Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1290 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─1290 /usr/sbin/httpd -DFOREGROUND
           ├─1291 /usr/sbin/httpd -DFOREGROUND
           ├─1292 /usr/sbin/httpd -DFOREGROUND
           ├─1293 /usr/sbin/httpd -DFOREGROUND
           ├─1294 /usr/sbin/httpd -DFOREGROUND
           └─1295 /usr/sbin/httpd -DFOREGROUND
...

从此输出中可以看出,该服务似乎已成功启动。 但是,测试此方法的最佳方法是从Apache请求页面。

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

在服务器的命令提示符下键入:

hostname -I

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

或者,您可以使用curlicanhazip.com请求您的IP,它将为您提供从互联网上其他位置看到的公共IPv4地址:

curl -4 icanhazip.com

获得服务器的IP地址后,将其输入浏览器的地址栏:

http://your_server_ip

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

CentOS 7的默认Apache页面

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

第3步 - 管理Apache进程

现在您已经启动并运行了Web服务器,让我们来看看一些基本的管理命令。

要停止Web服务器,请键入:

sudo systemctl stop httpd

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

sudo systemctl start httpd

要停止然后再次启动该服务,请键入:

sudo systemctl restart httpd

如果您只是进行配置更改,Apache通常可以在不丢弃连接的情况下重新加载。 为此,请使用以下命令:

sudo systemctl reload httpd

默认情况下,Apache配置为在服务器引导时自动启动。 如果这不是您想要的,请键入以下命令禁用此行为:

sudo systemctl disable httpd

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

sudo systemctl enable httpd

现在,Apache将在服务器再次引导时自动启动。

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

使用Apache Web服务器时,您可以使用虚拟主机 (类似于Nginx中的服务器块)来封装配置详细信息并从单个服务器托管多个域。 在此步骤中,您将设置一个名为example.com的域,但您应将其替换为您自己的域名。 要了解有关使用DigitalOcean设置域名的更多信息,请参阅我们的DigitalOcean DNS简介

CentOS 7上的Apache默认启用一个服务器块,配置为从/var/www/html目录提供文档。 虽然这适用于单个站点,但如果您托管多个站点,它可能会变得难以处理。 您将在/var/wwwexample.com站点创建一个目录结构,而不是修改/var/www/html ,将/var/www/html保留为服务器的默认目录,如果客户端请求没有与任何其他网站匹配。

按如下所示为example.com创建html目录,使用-p标志创建任何必需的父目录:

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

创建另一个目录来存储站点的日志文件:

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

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

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

确保您的Web根目录设置了默认权限:

sudo chmod -R 755 /var/www

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

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

i切换到INSERT模式并将以下示例HTML添加到文件中:

/var/www/example.com/html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

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

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

在创建虚拟主机之前,您需要创建一个sites-available目录来存储它们。您还将创建sites-enabled目录,该目录告诉Apache虚拟主机已准备好为访问者提供服务。 sites-enabled目录将包含指向我们要发布的虚拟主机的符号链接。 使用以下命令创建两个目录:

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

接下来,您将告诉Apache在sites-enabled目录中查找虚拟主机。 要完成此操作,请编辑Apache的主配置文件,并添加一行代表其他配置文件的可选目录:

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

将此行添加到文件末尾:

IncludeOptional sites-enabled/*.conf

完成添加该行后,保存并关闭该文件。 现在您已准备好虚拟主机目录,您将创建虚拟主机文件。

首先在sites-available目录中创建一个新文件:

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

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

/etc/httpd/sites-available/example.com.conf
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog /var/www/example.com/log/error.log
    CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>

这将告诉Apache在哪里可以直接找到包含可公开访问的Web文档的根。 它还告诉Apache在哪里存储此特定站点的错误和请求日志。

完成后保存并关闭文件。

现在您已经创建了虚拟主机文件,您将启用它们,以便Apache知道为访问者提供服务。 为此,请在sites-enabled目录中为每个虚拟主机创建符号链接:

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

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

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

根据您的环境需求,有不同的方法来设置策略,因为SELinux允许您自定义安全级别。 此步骤将介绍两种调整Apache策略的方法:通用和特定目录。 调整目录策略更安全,因此是推荐的方法。

普遍调整Apache策略

普遍设置Apache策略将告诉SELinux使用httpd_unified布尔值来相同地处理所有Apache进程。 虽然这种方法更方便,但它不会像专注于文件或目录策略的方法那样提供相同级别的控制。

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

sudo setsebool -P httpd_unified 1

setsebool命令更改SELinux布尔值。 -P标志将更新启动时间值,使此更改在重新启动后保持不变。 httpd_unified是一个布尔值,它将告诉SELinux将所有Apache进程视为相同类型,因此您使用值1启用它。

调整目录上的Apache策略

单独设置/var/www/ example.com /log目录的SELinux权限将使您可以更好地控制Apache策略,但可能还需要更多维护。 由于此选项不是普遍设置策略,因此您需要为虚拟主机配置中指定的任何新日志目录手动设置上下文类型。

首先,检查SELinux提供的/var/www/ example.com /log目录的上下文类型:

sudo ls -dZ /var/www/example.com/log/

此命令列出并打印目录的SELinux上下文。 您将看到类似于以下内容的输出:

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/

当前上下文是httpd_sys_content_t ,它告诉SELinux Apache进程只能读取在此目录中创建的文件。 在本教程中,您将把/var/www/ example.com /log目录的上下文类型更改为httpd_log_t 此类型将允许Apache生成并附加到Web应用程序日志文件:

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

接下来,使用restorecon命令应用这些更改并使它们在重新引导后保持不变:

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

-R标志以递归方式运行此命令,这意味着它将更新任何现有文件以使用新上下文。 -v标志将打印命令所做的上下文更改。 您将看到以下输出确认更改:

restorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

您可以再次列出上下文以查看更改:

sudo ls -dZ /var/www/example.com/log/

输出反映了更新的上下文类型:

drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log

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

使用任一方法更新SELinux上下文后,Apache将能够写入/var/www/ example.com /log目录。 您现在可以成功重新启动Apache服务:

sudo systemctl restart httpd

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

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

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

-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log
-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log

现在您已经设置了虚拟主机并更新了SELinux权限,Apache现在将为您的域名提供服务。 您可以通过导航到http:// example.com ,在那里您应该看到如下内容:

成功! example.com虚拟主机正在运行!

这确认您的虚拟主机已成功配置并提供内容。 重复第4步和5,为其他域创建具有SELinux权限的新虚拟主机。

结论

在本教程中,您安装并管理了Apache Web服务器。 现在您已经安装了Web服务器,您可以选择多种类型的内容,以及可用于创建更丰富体验的技术。

如果您想构建一个更完整的应用程序,您可以查看有关如何在CentOS 7上配置LAMP的文章。