介绍
在Apache的HTTP服务器是世界上使用最广泛的Web服务器。它提供了许多强大的功能,包括可动态加载的模块、强大的媒体支持以及与其他流行软件的广泛集成。
在本指南中,您将在 CentOS 8 服务器上安装带有虚拟主机的 Apache Web 服务器。有关本教程的更详细版本,请参阅如何在 CentOS 8 上安装 Apache Web 服务器。
先决条件
您将需要以下内容来完成本指南:
- 在您的服务器上配置了 sudo 权限的非 root 用户,按照CentOS 8的初始服务器设置指南进行设置。
- 确保按照上述指南中使用 CentOS 8(推荐)的初始服务器设置的步骤 4配置基本防火墙。
第 1 步 – 安装 Apache
Apache 在 CentOS 的默认软件存储库中可用,这意味着您可以使用dnf
包管理器安装它。
作为先决条件中配置的非root sudo 用户,安装Apache 包:
- sudo dnf install httpd
确认安装后,dnf
将安装 Apache 和所有需要的依赖项。
步骤 2 – 调整防火墙
通过完成先决条件部分中提到的CentOS 8 初始服务器设置指南的第 4 步,您将已经安装firewalld
在您的服务器上以通过 HTTP 提供请求。
如果您还计划将 Apache 配置为通过 HTTPS 提供内容,您还需要443
通过启用该https
服务来打开端口:
- sudo firewall-cmd --permanent --add-service=https
接下来,重新加载防火墙以使这些新规则生效:
- sudo firewall-cmd --reload
防火墙重新加载后,您就可以启动服务并检查 Web 服务器。
第 3 步 — 检查您的 Web 服务器
安装完成后,Apache 不会在 CentOS 上自动启动,因此您需要手动启动 Apache 进程:
- sudo systemctl start httpd
使用以下命令验证服务是否正在运行:
- sudo systemctl status httpd
active
当服务运行时,您将收到一个状态:
Output● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
Docs: man:httpd.service(8)
Main PID: 14219 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 5059)
Memory: 24.9M
CGroup: /system.slice/httpd.service
├─14219 /usr/sbin/httpd -DFOREGROUND
├─14220 /usr/sbin/httpd -DFOREGROUND
├─14221 /usr/sbin/httpd -DFOREGROUND
├─14222 /usr/sbin/httpd -DFOREGROUND
└─14223 /usr/sbin/httpd -DFOREGROUND
...
访问默认的 Apache 登陆页面,通过您的 IP 地址确认软件是否正常运行:
http://your_server_ip
您将看到默认的 CentOS 8 Apache 网页:
此页面表明 Apache 工作正常。它还包括一些关于重要 Apache 文件和目录位置的基本信息。
步骤 4 — 设置虚拟主机(推荐)
在使用 Apache web 服务器时,可以使用虚拟主机(如果你更熟悉 Nginx,这些类似于服务器块)来封装配置细节并从单个服务器托管多个域。在这一步中,您将设置一个名为 的域example.com
,但您应该将其替换为您自己的域名。如果您正在使用 DigitalOcean 设置域名,请参阅我们的网络文档。
html
为 <p> example.com
<^>创建目录,如下所示,使用该-p
标志创建任何必要的父目录:
- sudo mkdir -p /var/www/example.com/html
创建一个额外的目录来存储站点的日志文件:
- sudo mkdir -p /var/www/example.com/log
接下来,html
使用$USER
环境变量分配目录的所有权:
- sudo chown -R $USER:$USER /var/www/example.com/html
确保您的 Web 根目录具有默认权限集:
- sudo chmod -R 755 /var/www
接下来,index.html
使用vi
您最喜欢的编辑器创建一个示例页面:
- sudo vi /var/www/example.com/html/index.html
按i
切换到INSERT
模式并将以下示例 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
目录中查找虚拟主机。为此,请使用 vi 或您喜欢的文本编辑器编辑 Apache 的主配置文件,并添加一行声明附加配置文件的可选目录:
- sudo vi /etc/httpd/conf/httpd.conf
按大写G
键导航到文件末尾。然后按i
切换到INSERT
模式并将以下行添加到文件的最后:
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
添加完该行后,保存并关闭文件。现在您已经有了虚拟主机目录,您将创建虚拟主机文件。
首先在sites-available
目录中创建一个新文件:
- sudo vi /etc/httpd/sites-available/example.com.conf
添加以下配置块,并将example.com
域更改为您的域名:
<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 为您的虚拟主机设置了正确的策略。
步骤 5 — 调整虚拟主机的 SELinux 权限(推荐)
SELinux是一个 Linux 内核安全模块,可为 Linux 系统带来更高的安全性。CentOS 8 配备了 SELinux,配置为使用默认的 Apache 配置。由于您通过在虚拟主机配置文件中设置自定义日志目录来更改默认配置,因此如果您尝试启动 Apache 服务,您将收到错误消息。要解决此问题,您需要更新 SELinux 策略以允许 Apache 写入必要的文件。
由于 SELinux 允许您自定义安全级别,因此有多种方法可以根据您的环境需求来设置策略。此步骤将涵盖两种调整 Apache 策略的方法:通用和特定目录。调整目录策略更安全,因此是推荐的方法。
普遍调整 Apache 策略
普遍设置 Apache 策略将告诉 SELinux 使用httpd_unified
布尔值以相同的方式处理所有 Apache 进程。虽然这种方法更方便,但它不会为您提供与专注于文件或目录策略的方法相同级别的控制。
运行以下命令以设置通用 Apache 策略:
- sudo setsebool -P httpd_unified 1
该setsebool
命令更改 SELinux 布尔值。该-P
标志将更新启动时间值,使此更改在重新启动后保持不变。httpd_unified
是一个布尔值,它会告诉 SELinux 将所有 Apache 进程视为相同类型,因此您使用1
.
调整目录上的 Apache 策略
为目录单独设置 SELinux 权限将使您更好地控制 Apache 策略,但也可能需要更多维护。由于此选项并非通用设置策略,因此您需要为虚拟主机配置中指定的任何新日志目录手动设置上下文类型。/var/www/example.com/log
首先,检查SELinux给目录的上下文类型:/var/www/example.com/log
- sudo ls -dlZ /var/www/example.com/log/
此命令列出并打印目录的 SELinux 上下文。您将收到类似于以下内容的输出:
Outputdrwxr-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 进程只能读取在此目录中创建的文件。在本教程中,您将目录的上下文类型更改为. 这种类型将允许 Apache 生成并附加到 Web 应用程序日志文件:/var/www/example.com/log
httpd_log_t
- 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
标志将打印命令所做的上下文更改。您将收到以下确认更改的输出:
OutputRelabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
您可以再次列出上下文以查看更改:
- sudo ls -dlZ /var/www/example.com/log/
输出反映了更新的上下文类型:
Outputdrwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
现在目录正在使用该类型,您已准备好测试您的虚拟主机配置。/var/www/example.com/log
httpd_log_t
步骤 6 — 测试虚拟主机(推荐)
使用任一方法更新 SELinux 上下文后,Apache 将能够写入该目录。您现在可以成功重新启动 Apache 服务:/var/www/example.com/log
- sudo systemctl restart httpd
列出目录的内容以查看 Apache 是否创建了日志文件:/var/www/example.com/log
- ls -lZ /var/www/example.com/log
您将收到确认 Apache 能够创建虚拟主机配置中指定的error.log
和requests.log
文件:
Output-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-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
这确认您的虚拟主机已成功配置并提供内容。重复步骤 4 和 5,为其他域创建具有 SELinux 权限的新虚拟主机。
结论
在本教程中,您安装并管理了 Apache Web 服务器。现在您已经安装了 Web 服务器,对于可以提供的内容类型以及可以用来创建更丰富体验的技术,您有许多选择。
如果您想构建一个更完整的应用程序堆栈,您可以查看这篇关于如何在 CentOS 8 上配置LAMP 堆栈的文章。