如何在 CentOS 7 上安装 Apache Web 服务器
介绍
Apache HTTP 服务器是世界上使用最广泛的 Web 服务器。它提供了许多强大的功能,包括可动态加载的模块、强大的媒体支持以及与其他流行软件的广泛集成。
在本指南中,您将在 CentOS 7 服务器上安装带有虚拟主机的 Apache Web 服务器。
先决条件
您将需要以下内容来完成本指南:
- 在您的服务器上配置了 sudo 权限的非根用户,按照 CentOS 7 的初始服务器设置指南进行设置。
- 配置为指向您的服务器的域名。您可以按照如何使用 DigitalOcean 设置主机名教程学习如何将域指向 DigitalOcean Droplet。
- 按照新 CentOS 7 服务器指南的其他推荐步骤配置的基本防火墙。
第 1 步 — 安装 Apache
Apache 在 CentOS 的默认软件存储库中可用,这意味着您可以使用 yum
包管理器安装它。
作为先决条件中配置的非根 sudo 用户,更新本地 Apache httpd
包索引以反映最新的上游更改:
- sudo yum update httpd
软件包更新后,安装 Apache 软件包:
- sudo yum install httpd
确认安装后,yum
将安装 Apache 和所有必需的依赖项。
如果您完成了先决条件部分中提到的新 CentOS 7 服务器指南的附加推荐步骤,您将在您的服务器上安装 firewalld
并且您需要打开端口 80
允许 Apache 通过 HTTP 服务请求。如果您还没有这样做,您可以通过使用以下命令启用 firewalld
的 http
服务来完成此操作:
- sudo firewall-cmd --permanent --add-service=http
如果您计划将 Apache 配置为通过 HTTPS 提供内容,您还需要通过启用 https
服务来打开端口 443
:
- sudo firewall-cmd --permanent --add-service=https
接下来,重新加载防火墙以使这些新规则生效:
- sudo firewall-cmd --reload
防火墙重新加载后,您就可以启动服务并检查 Web 服务器了。
第 2 步 — 检查您的 Web 服务器
安装完成后,Apache 不会在 CentOS 上自动启动。您将需要手动启动 Apache 进程:
- sudo systemctl start httpd
使用以下命令验证服务是否正在运行:
- sudo systemctl status httpd
当服务运行时,您将看到 active
状态:
OutputRedirecting 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 请求一个页面。
您可以通过您的 IP 地址访问默认的 Apache 登录页面以确认该软件是否正常运行。如果您不知道服务器的 IP 地址,您可以通过几种不同的方式从命令行获取它。
在服务器的命令提示符下键入:
- hostname -I
此命令将显示主机的所有网络地址,因此您将得到几个由空格分隔的 IP 地址。您可以在网络浏览器中尝试每一种,看看它们是否有效。
或者,您可以使用 curl
从 icanhazip.com
请求您的 IP,这将为您提供从互联网上其他位置看到的公共 IPv4 地址:
- curl -4 icanhazip.com
获得服务器的 IP 地址后,将其输入浏览器的地址栏:
http://your_server_ip
您将看到默认的 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 服务器上配置虚拟主机。
第 4 步 — 设置虚拟主机(推荐)
使用 Apache Web 服务器时,您可以使用虚拟主机(类似于 Nginx 中的服务器块)来封装配置详细信息,并从一台服务器托管多个域。在此步骤中,您将设置一个名为 your_domain
的域,但您应将其替换为您自己的域名。要了解有关使用 DigitalOcean 设置域名的更多信息,请参阅我们的 DigitalOcean DNS 简介。
CentOS 7 上的 Apache 默认启用一个服务器块,该服务器块配置为提供来自 /var/www/html
目录的文档。虽然这适用于单个站点,但如果您托管多个站点,它可能会变得笨拙。您无需修改 /var/www/html
,而是在 /var/www
中为 your_domain
站点创建一个目录结构,留下 /var/www/html
在客户端请求与任何其他站点不匹配时作为默认目录提供服务。
如下所示为 your_domain
创建 html
目录,使用 -p
标志创建任何必要的父目录:
- sudo mkdir -p /var/www/your_domain/html
创建一个额外的目录来存储站点的日志文件:
- sudo mkdir -p /var/www/your_domain/log
接下来,使用 $USER
环境变量分配 html
目录的所有权:
- sudo chown -R $USER:$USER /var/www/your_domain/html
确保您的 Web 根目录具有默认权限集:
- sudo chmod -R 755 /var/www
接下来,使用 vi
或您喜欢的编辑器创建示例 index.html
页面:
- sudo vi /var/www/your_domain/html/index.html
按 i
切换到 INSERT
模式并将以下示例 HTML 添加到文件中:
<html>
<head>
<title>Welcome to your website!</title>
</head>
<body>
<h1>Success! The your_domain 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/your_domain.conf
添加以下配置块,并将 your_domain
域更改为您的域名:
<VirtualHost *:80>
ServerName www.your_domain
ServerAlias your_domain
DocumentRoot /var/www/your_domain/html
ErrorLog /var/www/your_domain/log/error.log
CustomLog /var/www/your_domain/log/requests.log combined
</VirtualHost>
这将告诉 Apache 在哪里可以直接找到包含可公开访问的 Web 文档的根目录。它还会告诉 Apache 在何处存储该特定站点的错误和请求日志。
完成后保存并关闭文件。
现在您已经创建了虚拟主机文件,您将启用它们以便 Apache 知道将它们提供给访问者。为此,请在 sites-enabled
目录中为每个虚拟主机创建一个符号链接:
- sudo ln -s /etc/httpd/sites-available/your_domain.conf /etc/httpd/sites-enabled/your_domain.conf
您的虚拟主机现已配置并准备好提供内容。在重新启动 Apache 服务之前,让我们确保 SELinux 为您的虚拟主机制定了正确的策略。
第 5 步 — 调整虚拟主机的 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/your_domain/log
目录单独设置 SELinux 权限将使您能够更好地控制 Apache 策略,但也可能需要更多维护。由于此选项不是通用设置策略,因此您需要为虚拟主机配置中指定的任何新日志目录手动设置上下文类型。
首先,检查 SELinux 给 /var/www/your_domain/log
目录的上下文类型:
- sudo ls -dZ /var/www/your_domain/log/
此命令列出并打印目录的 SELinux 上下文。您将看到类似于以下内容的输出:
Outputdrwxr-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
。此类型将允许 Apache 生成并附加到 Web 应用程序日志文件:
- sudo semanage fcontext -a -t httpd_log_t "/var/www/your_domain/log(/.*)?"
接下来,使用 restorecon
命令应用这些更改并让它们在重新启动后保持不变:
- sudo restorecon -R -v /var/www/your_domain/log
-R
标志以递归方式运行此命令,这意味着它将更新任何现有文件以使用新上下文。 -v
标志将打印命令所做的上下文更改。您将看到以下输出以确认更改:
Outputrestorecon reset /var/www/your_domain/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
您可以再次列出上下文以查看更改:
- sudo ls -dZ /var/www/your_domain/log/
输出反映更新的上下文类型:
Outputdrwxr-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 服务:
- sudo systemctl restart httpd
列出 /var/www/your_domain/log
目录的内容以查看 Apache 是否创建了日志文件:
- ls -lZ /var/www/your_domain/log
您会看到 Apache 能够创建在虚拟主机配置中指定的 error.log
和 requests.log
文件:
Output-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://your_domain
来测试它,您应该会在其中看到如下内容:

这确认您的虚拟主机已成功配置并提供内容。重复第 4 步和第 5 步,为其他域创建具有 SELinux 权限的新虚拟主机。
结论
在本教程中,您安装并管理了 Apache Web 服务器。现在您已经安装了 Web 服务器,对于可以提供的内容类型以及可以用来创建更丰富体验的技术,您有很多选择。
如果您想构建更完整的应用程序堆栈,可以查看这篇关于如何在 CentOS 7 上配置 LAMP 堆栈的文章。