前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Apache HTTP 服务器是世界上使用最广泛的 Web 服务器。它提供许多强大的功能,包括动态加载模块、强大的媒体支持以及与其他流行软件的广泛集成。
在本指南中,您将在 CentOS 7 服务器上安装一个带有虚拟主机的 Apache Web 服务器。
先决条件
您需要以下内容才能完成本指南:
在服务器上配置了具有 sudo 特权的非 root 用户,可以按照 CentOS 7 的初始服务器设置指南进行设置。配置了指向您的服务器的域名。您可以按照《如何在 DigitalOcean Droplets 上设置主机名》教程来了解如何将域名指向 DigitalOcean Droplets。按照《为新的 CentOS 7 服务器进行额外推荐步骤》指南进行了基本防火墙配置。步骤 1 — 安装 Apache
Apache 可以在 CentOS 的默认软件仓库中找到,这意味着您可以使用 yum
软件包管理器来安装它。
作为先决条件中配置的非 root 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 服务器
在 CentOS 上,安装完成后 Apache 不会自动启动。您需要手动启动 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 请求页面。
您可以通过 IP 地址访问默认的 Apache 落地页,以确认软件是否正常运行。如果您不知道服务器的 IP 地址,可以从命令行以几种不同的方式获取。
在服务器的命令提示符下输入以下命令:
hostname -I
此命令将显示主机的所有网络地址,因此您将得到几个由空格分隔的 IP 地址。您可以尝试在 Web 浏览器中使用每个地址,看看它们是否有效。
或者,您可以使用 curl
从 icanhazip.com
请求您的 IP,这将给您另一个位置在互联网上看到的公共 IPv4 地址:
curl -4 icanhazip.com
当您获得服务器的 IP 地址后,将其输入到浏览器的地址栏中:
http://your_server_ip
您将看到默认的 CentOS 7 Apache 网页:
!Default Apache page for CentOS 7
此页面表示 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
中创建一个目录结构,用于 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 上下文。您将看到类似以下的输出:
drwxr-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
标志将打印命令所做的上下文更改。您将看到以下输出来确认更改:
restorecon 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/
输出将反映更新后的上下文类型:
drwxr-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
文件:
-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
来测试,您应该会看到类似以下的内容:
!成功!example.com 虚拟主机正在工作!
这证实了您的虚拟主机已成功配置并提供内容。重复步骤 4 和 5,为其他域创建新的虚拟主机,并设置 SELinux 权限。
结论
在本教程中,您安装并管理了 Apache Web 服务器。现在您已经安装了 Web 服务器,您有许多选项可用于提供内容的类型以及可以使用的技术来创建更丰富的体验。
如果您想构建更完整的应用程序堆栈,您可以查看这篇关于如何在 CentOS 7 上配置 LAMP 堆栈的文章。