介绍
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 包:
1sudo dnf install httpd
确认安装后,DNF 将安装 Apache 和所有所需的依赖。
第2步:调整防火墙
通过在前提部分中提到的第4步(CentOS 8初始服务器设置)指南(https://andsky.com/tech/tutorials/initial-server-setup-with-centos-8#step-4-%E2%80%94-setting-up-a-basic-firewall),您将已经在您的服务器上安装了firewalld
,以便通过HTTP服务请求。
如果您还计划将Apache配置为通过HTTPS提供内容,您还将通过启用https
服务来打开443
端口:
1sudo firewall-cmd --permanent --add-service=https
接下来,重新加载防火墙以实施这些新规则:
1sudo firewall-cmd --reload
防火墙重新加载后,您准备启动服务并检查Web服务器。
步骤3 - 检查您的Web服务器
安装完成后,Apache不会在CentOS上自动启动,因此您需要手动启动Apache过程:
1sudo systemctl start httpd
验证该服务是否使用以下命令运行:
1sudo systemctl status httpd
当服务运行时,您将收到一个活跃
状态:
1[secondary_label Output]
2● httpd.service - The Apache HTTP Server
3 Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
4 Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
5 Docs: man:httpd.service(8)
6 Main PID: 14219 (httpd)
7 Status: "Running, listening on: port 80"
8 Tasks: 213 (limit: 5059)
9 Memory: 24.9M
10 CGroup: /system.slice/httpd.service
11 ├─14219 /usr/sbin/httpd -DFOREGROUND
12 ├─14220 /usr/sbin/httpd -DFOREGROUND
13 ├─14221 /usr/sbin/httpd -DFOREGROUND
14 ├─14222 /usr/sbin/httpd -DFOREGROUND
15 └─14223 /usr/sbin/httpd -DFOREGROUND
16
17...
访问默认的 Apache 定位页面以确认软件通过您的 IP 地址正确运行:
1http://your_server_ip
您将看到默认的 CentOS 8 Apache 网页:
此页面表示 Apache 运行正确,还包含有关重要 Apache 文件和目录位置的一些基本信息。
步骤 4 — 设置虚拟主机(推荐)
在使用Apache Web 服务器时,您可以使用 virtual hosts(如果您更熟悉 Nginx,这些类似于服务器块)来封装配置细节,并从单个服务器中托管多个域。在此步骤中,您将设置一个名为example.com
的域名,但您应该用自己的域名替换。
如下,创建
example.com 的
html目录,使用
-p` 旗帜创建任何必要的母目录:
1sudo mkdir -p /var/www/example.com/html
创建一个额外的目录来存储网站的日志文件:
1sudo mkdir -p /var/www/example.com/log
接下来,与$USER
环境变量分配html
目录的所有权:
1sudo chown -R $USER:$USER /var/www/example.com/html
确保您的 Web 根具有默认权限设置:
1sudo chmod -R 755 /var/www
接下来,使用vi
或您最喜欢的编辑器创建一个样本index.html
页面:
1sudo vi /var/www/example.com/html/index.html
按i
,切换到INSERT
模式,并将下列样本HTML添加到文件中:
1[label /var/www/example.com/html/index.html]
2<html>
3 <head>
4 <title>Welcome to Example.com!</title>
5 </head>
6 <body>
7 <h1>Success! The example.com 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在网站启用
目录中搜索虚拟主机. 要做到这一点,用vi或你最喜欢的文本编辑器编辑Apache的主要配置文件,并添加一行声明额外配置文件的可选目录:
1sudo vi /etc/httpd/conf/httpd.conf
然后按i
切换到INSERT
模式,并将下列行添加到文件的尽头:
1[label /etc/httpd/conf/httpd.conf]
2...
3# Supplemental configuration
4#
5# Load config files in the "/etc/httpd/conf.d" directory, if any.
6IncludeOptional conf.d/*.conf
7IncludeOptional sites-enabled/*.conf
保存并关闭文件,当您完成添加该行时. 现在您有您的虚拟主机目录,您将创建您的虚拟主机文件。
首先,在可用网站
目录中创建一个新文件:
1sudo vi /etc/httpd/sites-available/example.com.conf
添加以下配置块,并将example.com
域名更改为您的域名:
1[label /etc/httpd/sites-available/example.com.conf]
2<VirtualHost *:80>
3 ServerName www.example.com
4 ServerAlias example.com
5 DocumentRoot /var/www/example.com/html
6 ErrorLog /var/www/example.com/log/error.log
7 CustomLog /var/www/example.com/log/requests.log combined
8</VirtualHost>
这会告诉Apache直接在哪里找到可公开访问的Web文档的根,它还会告诉Apache在哪里存储错误和请求该特定网站的日志。
保存并关闭文件,当你完成。
现在你已经创建了虚拟主机文件,你将启用它们,以便Apache知道如何为访问者提供服务。
1sudo 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 使用 Boolean 来对待所有 Apache 流程一样,虽然这种方法更方便,但它不会为您提供与专注于文件或目录策略的方法相同的控制水平。
运行以下命令来设置通用 Apache 策略:
1sudo setsebool -P httpd_unified 1
setsebool
命令会更改 SELinux Boolean 值. -P
标志会更新启动时值,使此变化在重启中继续存在。
在目录中调整 Apache 策略
单独为 /var/www/example.com/log
目录设置 SELinux 权限将为您提供更多对 Apache 策略的控制,但也可能需要更多的维护。
首先,检查 SELinux 给 /var/www/example.com/log
目录的背景类型:
1sudo ls -dlZ /var/www/example.com/log/
此命令列出并打印了目录的 SELinux 背景. 您将收到类似于以下的输出:
1[secondary_label Output]
2drwxr-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过程只能读取在该目录中创建的文件。 在本教程中,您将更改 /var/www/example.com/log
目录的背景类型为 httpd_log_t
。
1sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
接下来,使用restorecon
命令来应用这些更改,并让它们在重启中持续:
1sudo restorecon -R -v /var/www/example.com/log
-R
旗将重复执行此命令,这意味着它将更新任何现有文件以使用新背景. -v
旗将打印所做的命令的背景变化。
1[secondary_label Output]
2Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
您可以再次列出背景以查看更改:
1sudo ls -dlZ /var/www/example.com/log/
输出反映了更新的背景类型:
1[secondary_label Output]
2drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
现在,即便使用httpd_log_t
类型的/var/www/example.com/log
目录,您就可以测试虚拟主机配置了。
步骤 6 — 测试虚拟主机(推荐)
一旦使用任何一种方法更新了 SELinux 背景,Apache 将能够写入 /var/www/example.com/log
目录,您现在可以成功重新启动 Apache 服务:
1sudo systemctl restart httpd
列出 /var/www/example.com/log
目录的内容,看看 Apache 是否创建了日志文件:
1ls -lZ /var/www/example.com/log
您将收到确认Apache能够创建虚拟主机配置中指定的error.log
和requests.log
文件的确认:
1[secondary_label Output]
2-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
3-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堆栈的本文(https://andsky.com/tech/tutorials/how-to-install-linux-apache-mariadb-php-lamp-stack-on-centos-8)。