介绍
HTTP服务器是世界上最广泛使用的Web服务器,它提供了许多强大的功能,包括动态可加载的模块,强大的媒体支持,以及与其他流行的软件的广泛集成。
在本指南中,您将在 CentOS 7 服务器上安装具有虚拟主机的 Apache Web 服务器。
前提条件
您将需要以下内容来完成本指南:
- 在您的服务器上配置了 sudo 权限的非 root 用户,通过遵循 CentOS 7 的初始服务器设置指南设置。
- 配置为指向您的服务器的域名. 您可以通过遵循 如何使用 DigitalOcean 设置主机名教程来学习如何指向 DigitalOcean Droplets 的域名。
步骤 1 - 安装 Apache
Apache在CentOS的默认软件存储库中可用,这意味着您可以使用yum
包管理器安装它。
当非 root sudo 用户在前提条件中配置时,更新本地 Apache httpd
包索引以反映最新的上游变化:
1sudo yum update httpd
更新后,安装 Apache 包:
1sudo yum install httpd
确认安装后,yum
将安装Apache和所有所需的依赖。
如果您完成了前提部分中提到的 新 CentOS 7 服务器的附加推荐步骤指南,您将安装防火墙
在您的服务器上,您需要打开端口80
,以允许 Apache 通过 HTTP 服务请求。
1sudo firewall-cmd --permanent --add-service=http
如果您打算将Apache配置为通过HTTPS提供内容,您还将通过启用https
服务来打开443
端口:
1sudo firewall-cmd --permanent --add-service=https
接下来,重新加载防火墙以实施这些新规则:
1sudo firewall-cmd --reload
防火墙重新加载后,您准备启动服务并检查Web服务器。
步骤2 - 检查您的Web服务器
安装完成后,Apache不会在CentOS上自动启动,您需要手动启动Apache过程:
1sudo systemctl start httpd
验证该服务是否使用以下命令运行:
1sudo systemctl status httpd
当服务运行时,您将看到一个活跃
状态:
1[secondary_label Output]
2Redirecting to /bin/systemctl status httpd.service
3● httpd.service - The Apache HTTP Server
4 Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
5 Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago
6 Docs: man:httpd(8)
7 man:apachectl(8)
8 Main PID: 1290 (httpd)
9 Status: "Processing requests..."
10 CGroup: /system.slice/httpd.service
11 ├─1290 /usr/sbin/httpd -DFOREGROUND
12 ├─1291 /usr/sbin/httpd -DFOREGROUND
13 ├─1292 /usr/sbin/httpd -DFOREGROUND
14 ├─1293 /usr/sbin/httpd -DFOREGROUND
15 ├─1294 /usr/sbin/httpd -DFOREGROUND
16 └─1295 /usr/sbin/httpd -DFOREGROUND
17...
正如你可以从这个输出中看到的那样,该服务似乎已经成功启动,但是,测试这一点的最佳方法是请求来自Apache的页面。
您可以访问默认的 Apache 定位页面,以确认软件通过您的 IP 地址正确运行. 如果您不知道您的服务器的 IP 地址,您可以从命令行获得几种不同的方式。
在您的服务器的命令提示中输入:
1hostname -I
此命令将显示所有主机的网络地址,因此您将获得几个以空间分开的IP地址,您可以尝试在您的Web浏览器中查看它们是否有效。
或者,您可以使用curl
来请求您的IP从icanhazip.com
,这将为您提供您从互联网上的另一个位置看到的公共IPv4地址:
1curl -4 icanhazip.com
当您有您的服务器的IP地址时,请将其输入到您的浏览器的地址栏:
1http://your_server_ip
您将看到默认的 CentOS 7 Apache 网页:
此页面表明Apache正在正常工作,还包含有关重要Apache文件和目录位置的一些基本信息,现在服务已安装并运行,您现在可以使用不同的systemctl
命令来管理该服务。
步骤 3 – 管理 Apache 流程
现在你有你的Web服务器并运行,让我们来谈谈一些基本的管理命令。
要停止您的 Web 服务器,键入:
1sudo systemctl stop httpd
要在停止时启动 Web 服务器,键入:
1sudo systemctl start httpd
要停止,然后重新启动服务,键入:
1sudo systemctl restart httpd
如果您只是在进行配置更改,Apache 通常可以重新加载而不会放弃连接。
1sudo systemctl reload httpd
默认情况下,Apache配置为在服务器启动时自动启动。
1sudo systemctl disable httpd
要重新启用服务在启动时启动,键入:
1sudo systemctl enable httpd
现在,Apache在服务器重新启动时会自动启动。
Apache 的默认配置将允许您的服务器托管单个网站. 如果您计划在您的服务器上托管多个域,则需要在您的 Apache Web 服务器上配置虚拟主机。
步骤 4 — 设置虚拟主机(推荐)
在使用 Apache 网页服务器时,您可以使用 virtual hosts (类似于 Nginx 中的服务器块) 来封装配置细节并从单个服务器中托管多个域名. 在此步骤中,您将设置一个被称为 your_domain
的域名,但您应该用自己的域名来代替。
CentOS 7上的Apache有一个默认启用的服务器块,它配置为从/var/www/html
目录中服务的文档。虽然这对单个网站非常有效,但如果您托管多个网站,它可能会变得不方便。而不是修改/var/www/html
,您将为您的_域
网站创建一个/var/www
中的目录结构,如果客户端请求不匹配任何其他网站,则将/var/www/html
作为默认目录提供。
用p
旗创建your_domain
的html
目录,以以下方式创建任何必要的母目录:
1sudo mkdir -p /var/www/your_domain/html
创建一个额外的目录来存储网站的日志文件:
1sudo mkdir -p /var/www/your_domain/log
接下来,与$USER
环境变量分配html
目录的所有权:
1sudo chown -R $USER:$USER /var/www/your_domain/html
确保您的 Web 根具有默认权限设置:
1sudo chmod -R 755 /var/www
接下来,使用vi
或您最喜欢的编辑器创建一个样本index.html
页面:
1sudo vi /var/www/your_domain/html/index.html
按i
,切换到INSERT
模式,并将下列样本HTML添加到文件中:
1[label /var/www/your_domain/html/index.html]
2<html>
3 <head>
4 <title>Welcome to your website!</title>
5 </head>
6 <body>
7 <h1>Success! The your_domain 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在网站启用
目录中搜索虚拟主机. 要做到这一点,编辑Apache的主要配置文件,并添加一行声称为额外配置文件的可选目录:
1sudo vi /etc/httpd/conf/httpd.conf
将此行添加到文件的末尾:
1IncludeOptional sites-enabled/*.conf
保存并关闭文件,当您完成添加该行时. 现在您有您的虚拟主机目录,您将创建您的虚拟主机文件。
首先,在可用网站
目录中创建一个新文件:
1sudo vi /etc/httpd/sites-available/your_domain.conf
添加以下配置块,并将your_domain
域名更改为您的域名:
1[label /etc/httpd/sites-available/your_domain.conf]
2<VirtualHost *:80>
3 ServerName www.your_domain
4 ServerAlias your_domain
5 DocumentRoot /var/www/your_domain/html
6 ErrorLog /var/www/your_domain/log/error.log
7 CustomLog /var/www/your_domain/log/requests.log combined
8</VirtualHost>
这会告诉Apache直接在哪里找到可公开访问的Web文档的根,它还会告诉Apache在哪里存储错误和请求该特定网站的日志。
保存并关闭文件,当你完成。
现在你已经创建了虚拟主机文件,你将启用它们,以便Apache知道如何为访问者提供服务。
1sudo ln -s /etc/httpd/sites-available/your_domain.conf /etc/httpd/sites-enabled/your_domain.conf
您的虚拟主机现在已配置并准备服务内容. 在重新启动 Apache 服务之前,请确保 SELinux 为您的虚拟主机提供正确的策略。
步骤 5 — 调整虚拟主机的 SELinux 权限(推荐)
由于您在虚拟主机配置文件中设置了自定义日志目录,如果您尝试启动 Apache 服务,您将收到错误消息。 要解决此问题,您需要更新 SELinux 策略以允许 Apache 写入所需的文件。 SELinux 为您的 CentOS 7 环境带来了增强的安全性,因此不建议完全禁用内核模块。
根据环境的需求,设置策略有不同的方法,因为SELinux允许您定制您的安全级别. 此步骤将涵盖调整Apache策略的两种方法:普遍和特定目录。
普遍调整 Apache 策略
将 Apache 策略设置为通用,将告诉 SELinux 使用httpd_unified
Boolean 来对待所有 Apache 流程,虽然这种方法更方便,但不会为您提供与专注于文件或目录策略的方法相同的控制级别。
运行以下命令来设置通用 Apache 策略:
1sudo setsebool -P httpd_unified 1
「setsebool」命令會改變 SELinux 布爾值. 「-P」旗會更新啟動時間值,使此變更在重啟中持續存在。
在目录中调整 Apache 策略
单独为 /var/www/your_domain/log
目录设置 SELinux 权限将为您提供更多对 Apache 策略的控制,但也可能需要更多的维护。
首先,检查 SELinux 给 /var/www/your_domain/log
目录的背景类型:
1sudo ls -dZ /var/www/your_domain/log/
此命令列出并打印了目录的 SELinux 背景. 您将看到类似于以下的输出:
1[secondary_label Output]
2drwxr-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
。
1sudo semanage fcontext -a -t httpd_log_t "/var/www/your_domain/log(/.*)?"
接下来,使用restorecon
命令来应用这些更改,并让它们在重启中持续:
1sudo restorecon -R -v /var/www/your_domain/log
-R
旗将重复执行此命令,这意味着它将更新任何现有文件以使用新背景. -v
旗将打印所做的命令的背景变化。
1[secondary_label Output]
2restorecon reset /var/www/your_domain/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
您可以再次列出背景以查看更改:
1sudo ls -dZ /var/www/your_domain/log/
输出反映了更新的背景类型:
1[secondary_label Output]
2drwxr-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 服务:
1sudo systemctl restart httpd
列出 /var/www/your_domain/log
目录的内容,看看 Apache 是否创建了日志文件:
1ls -lZ /var/www/your_domain/log
您将看到Apache能够创建虚拟主机配置中指定的error.log
和requests.log
文件:
1[secondary_label Output]
2-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log
3-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堆栈的这篇文章(https://andsky.com/tech/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7#step-four-%E2%80%94-test-php-processing-on-your-web-server)。