Linux Web 服务器 (Apache) 的安装、配置和故障排除

2023-10-13

在本教程中,我们将具体讨论 Linux Web 服务器或 Apache Web 服务器,以及如何安装和配置它以向其他人提供您的内容。

Web 服务器是一个通过 HTTP 协议处理请求的系统,您向服务器请求一个文件,它会响应所请求的文件,这可能会让您知道 Web 服务器不仅仅用于 Web。

Web服务器嵌入在打印机、路由器等设备中,当你打开路由器配置页面时,其背后就有一个Web服务器。

当您打开打印机配置页时,其背后还有一个网络服务器在服务您的请求,因此网络服务器无处不在。

 

 

网络服务器如何工作

首先,您的浏览器向服务器发送请求。

服务器从您那里获取所请求的文件或页面,并将其映射到服务器上的相应文件。服务器将文件发送回浏览器,并附带一些信息,例如 MIME 类型、内容长度和其他有用信息。

有时,请求的文件是静态页面(如 HTML 页面)或动态页面(如 PHP、Java、Perl 或任何其他服务器端语言)。

例如,当您输入 www.yourDomain.com 时,浏览器会查询DNS服务器关于计算机的 IP 地址:www.yourDomain.com。一旦浏览器收到 DNS 的响应,它就会在端口 80 上启动 TCP 连接并请求默认网页,然后服务器将此页面发送给您,仅此而已。

 

Linux Web 服务器实现

有许多 Linux Web 服务器实现可供您使用:

  • 阿帕奇服务器
  • Nginx
  • Lighttpd
  • 阿帕奇雄猫
  • Monkey HTTP Daemon(特别用于嵌入式系统)

Linux Web 服务器还有更多,但此列表是最常用的 Web 服务器。

最常用的 Web 服务器是 Apache 和 Nginx。

在这篇文章中,我们将使用阿帕奇服务器有几个原因:

  • Stable.
  • 灵活的。
  • Secure.

我们将在 Linux 上安装和配置 Apache 服务器,但首先让我们回顾一下 HTTP 协议基础知识的一些基础知识。

 

了解 HTTP

当您向 Web 服务器请求文件或页面时,客户端首先通过端口 80 连接到服务器。连接成功后,客户端将 HTTP 命令(也称为方法)发送到服务器。该命令包含一个请求标头,其中包含有关客户端的信息。

要在 chrome 中查看这些请求标头,请打开 chrome devtools,然后打开网络面板并访问 google.com 并检查请求标头,您应该看到如下内容:

请求标头还包括有关客户端的信息,例如用户代理和接受的格式。

Web 服务器可以通过请求标头发送附加信息。例如,如果您单击将打开另一个网站的链接,则标题将包含推荐网站。

完全接收到请求标头后,服务器将响应所请求的文件或页面以及响应标头。

响应标头包括有关接收到的内容、其类型和其他信息的信息。

您可以从浏览器网络面板检查响应标头。

 

安装 Apache 网络服务器

您可以使用以下命令在基于 Red Hat 的发行版上安装 Apache 服务器:


$ dnf -y httpd  

或者,如果您使用基于 Debian 的发行版,则可以像这样安装:


$ apt-get -y install apache2  

Apache Web 服务器服务称为httpd在基于 Red Hat 的发行版(如 CentOS)上,虽然它被称为apache2在基于 Debian 的发行版中。

如果您使用 iptables 等防火墙,您应该添加规则对于端口 80。


$ iptables -I INPUT 1 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  

或者如果你是使用防火墙,您可以使用以下命令:


$ firewall-cmd --add-port=80/tcp  

要启动您的服务并在启动时启用它:


$ systemctl start httpd

$ systemctl enable httpd  

您可以使用以下命令检查您的服务是否正在运行:


$ systemctl status httpd  

现在打开浏览器并访问http://localhost orhttp://[::1]/如果您使用的是 IP v6,并且安装顺利,您应该会看到 HTML 主页。

 

配置 Apache Web 服务器

您可以将文件添加到 Apache


/var/www/html  

顶级页面的目录。

只需记住确保放置在该目录中的任何文件或目录都是世界可读的。

默认索引页是index.html。

Apache 配置文件位于


/etc/httpd/conf/  

目录。

在基于 Debian 的系统(例如 Ubuntu)上,您可以在以下位置找到它:


/etc/apache2/apache2.conf  

file.

我们无法在一篇文章中讨论 Apache 的每个选项,但我们将讨论最重要的选项。

您将它们称为选项或指令。

服务器根选项

此选项指定 Apache Web 服务器的配置文件夹。在基于 Red Hat 的发行版上,ServerRoot 选项是/etc/httpd/目录。在 Debian 发行版上,ServerRoot 选项是/etc/apache2/.


ServerRoot /etc/httpd  

收听选项

Listen 选项指定 Apache Web 服务器将用于等待传入连接的端口。

该选项的默认值为80 对于不安全的连接和443用于安全连接。

如果您的服务器上有多个 IP 地址,您可以使用“侦听”选项指定应侦听连接的 IP。

您可以指定 80 以外的其他端口,只需确保它未被使用即可。

您可以在同一硬件上运行许多 HTTP 服务器,每个服务器都在一个唯一的端口上。

当服务器在非标准端口(例如端口 8080)上运行时,将需要明确声明端口号,如下所示:

www.example.com:8080


Listen 80  

服务器名称选项

此选项指定向访问者显示的 Web 服务器的主机名。


ServerName FQDN  

文档根选项

DocumentRoot 选项定义包含要提供的文件的路径。

默认路径是 /var/www/html 。


DocumentRoot /var/www/html  

MaxRequestWorkers 选项

该选项设置服务器将接收的最大并发连接数。

加载模块选项

我们使用此选项将模块加载到 Apache Web 服务器中。

有很多类似这样的 Apache 模块:

mod_cgid:该模块使用 Apache Web 服务器运行 CGI 脚本。

mod_ssl:通过 SSL 和 TLS 协议提供安全连接。

mod_用户目录:此模块允许您提供用户特定目录中的内容。

如果要禁用加载特定模块,可以注释包含该模块的 Load module 行。

或者,如果您使用基于 Debian 的发行版(例如 Ubuntu),则可以使用以下命令:


$ a2enmod modulename  

a2enmod 启用该模块。


$ a2dismod modulename  

该命令用于禁用该模块。

所有这些命令所做的就是在下面创建一个符号链接


/etc/apache2/mods-enabled  

 

如果您使用 a2dismod,符号链接将被删除。

如果启用或禁用模块,则必须重新加载或重新启动 Apache Web 服务器。


LoadModule mod_cgid.so  

包含选项

此选项允许您包含其他配置文件。

您可以存储不同虚拟域的所有配置,Apache 将在运行时包含它们。


Include filePath  

用户目录选项

此选项指定包含可通过 Web 服务器访问的文件的目录。该目录通常是 public_html ,它位于用户的主目录中。

例如,如果您有一个用户 adam,他希望通过 Apache Web 服务器提供其 Web 内容。

首先,我们在他的主目录下创建一个public_html文件夹。

然后设置public_html文件夹的权限:


$ chmod 644 public_html  

现在,如果我们放置一个index.html文件,则可以通过浏览器访问它,如下所示:

http://您的主机名/~adam


UserDir public_html  

别名选项

此选项指定 DocumentRoot 位置之外且需要由 Apache Web 服务器提供服务的文件的位置。

就像您在 DocumentRoot 之外有文件一样,并且您希望访问者可以使用它们。


Alias URL_Path Actual_Path  

错误日志选项

此选项指定 Apache Web 服务器的错误日志文件。


ErrorLog /var/log/httpd/error_log  

虚拟主机选项

此选项允许您在同一服务器上托管多个网站。

这个想法是根据请求的主机名提供内容。

为主机 www.example.com 设置虚拟主机。首先,创建一个VirtualHost选项/etc/httpd/conf/httpd.conf file.

并指定 DocumentRoot 和 ServerName,如下所示:


<VirtualHost www.example.com>
 ServerAdmin admin@example.com
 DocumentRoot /home/adam/public_html
 ServerName www.example.com
 ErrorLog /var/log/users/adam/error_log
</VirtualHost>  

请记住,ServerName 选项必须可通过 DNS 解析。

这些是最常用的 Apache 选项。

虚拟主机类型

您可以在 Apache Web 服务器中定义两种类型的虚拟主机:

  • 基于名称的虚拟主机
  • 基于IP的虚拟主机

NameVirtualHost指令定义哪些地址可以是虚拟主机;星号 (*) 表示该服务器上的任何名称或地址。你可以这样写:


NameVirtualHost *
<VirtualHost *>
 ServerName www.example.com
 DocumentRoot "/home/user1/public_html/"
</VirtualHost>
<VirtualHost *>
 ServerName www.example2.com
 DocumentRoot "/ home/user2/public_html/"
</VirtualHost>  

如果您有多个 IP 地址并且想要使用 SSL 证书,则该网站必须位于专用 IP 地址上。你可以像这样编写基于IP的虚拟主机:


<VirtualHost 192.168.1.2>
 ServerName www.example.com
 DocumentRoot "/home/user1/public_html/"
</VirtualHost>
<VirtualHost 192.168.1.3>
 ServerName www.example2.com
 DocumentRoot "/ home/user2/public_html/"
</VirtualHost>  

 

Apache 进程所有权

我们从Linux进程管理每个进程都从其父进程继承其权限。

这一事实对于除设置了 SETUID 位的应用程序之外的所有进程都是如此;它们从所有者而不是父进程继承权限。 /bin/su 就是一个很好的例子。

如果普通用户运行 /bin/su 程序,它不会继承 adam 的权限,而是以 root 用户身份运行它。

由于Apache Web服务器需要绑定80端口,而这需要root权限。

绑定到80端口后,Apache可以以普通用户身份运行,并且只读取有权限读取的文件。

基于您使用的 Linux 发行版,用户可以是以下之一:

nobody、www、apache、www-data 或 daemon。

我推迟了为 Apache 引入另外两个选项,直到达到这一点。

用户选项

用户选项指定 Web 服务器将用来应答请求的用户 ID。


User www-data  

组选项

Group 选项指定 Apache Web 服务器将用于读取文件的组。


Group www-data  

对于使用可执行脚本(例如 CGI 或 PHP 脚本)的站点来说,安全性非常重要。

您将使用的用户将拥有读写权限服务器上所有站点的内容。但我们希望确保只有特定站点的成员才能阅读其站点。

这非常重要,因为如果攻击者破坏了您的网站,他将能够读取所有文件,因为 Apache 用户有权执行此操作。

那么如何解决这个问题呢?

 

苏执行支持

一种流行的方法是使用 suEXEC。 suEXEC 是一个以 root 权限运行的程序,它使 CGI 程序以特定用户的用户和组 ID 运行,而不是以 Apache 服务器用户的身份运行。

您可以像这样指定每个虚拟主机上的用户:


<VirtualHost www.example.com>
 SuExecUserGroup adam adamGroup
</VirtualHost>  

就这么简单。

 

阿帕奇认证

您可能希望将某些部分限制为特定访问者。它就像一个受密码保护的目录。

在Apache中,您可以存储名为的身份验证信息文件.htpasswd 文件。

您可以使用 htpasswd 命令来执行此操作。

首先,使用 htpasswd 命令创建 .htpasswd 文件:


$ htpasswd -c /home/adam/.htpassswd myuser  

第一次运行 htpasswd 时需要 -c 选项,但是当您需要添加更多用户时,不应该使用 -c,因为它会覆盖文件。

然后在public_html文件夹中创建一个.htaccess文件并写入以下内容:


<Location /vip>
 AuthName "test"
 AuthType Basic
 AuthUserFile /home/adam/.htpasswd
 Order deny,allow
 require valid-user
</Location>  

AuthName 是必需的,您可以使用任何您想要的字符串。

AuthType Basic 表示您正在使用 htpasswd 样式的用户文件。

AuthUserFile 指向包含 htpasswd 命令生成的密码的文件。

Order 行表示 Apache 必须默认拒绝访问,并且只允许 htpasswd 文件中指定的用户访问。

require 指令意味着允许 .htpasswd 文件中的任何用户。

 

Apache Web 服务器故障排除

如果您修改了 httpd.conf 文件并重新启动或重新加载 Apache Web 服务器,但它不起作用,那么您输入了错误的配置。然而,这并不是您需要对 Apache 进行故障排除的唯一情况。您可以查看 Apache 日志以了解该服务如何工作,以便诊断问题并解决它。

Apache 的两个主要日志文件是错误日志 and 访问日志 files.

您可以在以下位置找到这些文件


/var/log/apache2/  

目录(如果您使用的是基于 Debian 的发行版)。

access_log 文件包含对 Apache Web 服务器的每个请求以及有关客户端请求该资源的详细信息。

error_log 文件包含 Apache Web 服务器的错误。

您可以使用尾部命令查看日志文件:


$ tail -f /var/log/httpd/error_log  

我建议您查看Linux 系统日志服务器了解更多有关日志记录的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Web 服务器 (Apache) 的安装、配置和故障排除 的相关文章

  • 第 129 集:在 Python 中使用省略号以及 CPython 3.12 的目标

    第 129 集 在 Python 中使用省略号以及 CPython 3 12 的目标 真正的 Python 播客 2022 年 10 月 14 日56m RSS Apple Podcasts Google Podcasts Spotify
  • 互动

    无论您是在学习基本的 Python 数据结构 字符串 列表 字典等 第一次 或者您正在调试应用程序 交互式 Python shell 将是您最好的学习工具之一 使用交互式 Python shell 有时也称为 Python REPL 首先确

随机推荐

  • Python 指导委员会

    在本课程中 您将了解Python 指导委员会 从技术上来说 Python 的治理不是语言特征 然而 Python 3 8 是第一个不是在仁慈独裁统治下开发的 Python 版本 吉多 范罗苏姆 Python 语言现在由指导委员会由五位核心开
  • 列表:可变和动态

    在本课程中 您将探索 Python 列表如何可变和动态 Python 中的许多类型是不可变的 整数 浮点数 字符串 并且 正如您将在本课程后面学到的 元组都是不可变的 一旦创建了这些对象之一 就无法对其进行修改 除非您将该对象重新分配给新值
  • 在屏幕上绘图

    在本课程中 您将开始使用Surface 回想一下 一个表面是一个可以在其上绘图的矩形对象 就像一张白纸 这screen对象是一个Surface 并且您可以创建自己的Surface与显示屏分离的物体 您将用白色填充屏幕 并添加一个新的Surf
  • 数据科学数学

    数据科学数学 学习路径 技能 统计 相关性 线性回归 逻辑回归 在这个学习路径中 您将获得在数据科学方面取得进步所需的数学基础 其他资源 真正的 Python 数据科学主题 真正的 Python 机器学习主题 数据科学数学 学习路径 5 种
  • Python 基础练习:文件系统操作(概述)

    In Python 基础知识 文件系统操作 您学习了如何使用 Python 处理文件和文件夹 作为一名程序员 您将使用pathlib和shutil要完成的模块文件系统操作不依赖你的图形用户界面 GUI 虽然您已经进行了大量文件系统操作的实践
  • 使用 Python 和 ggplot 绘制数据图表

    在本课程中 您将学习如何使用ggplot在Python中使用创建数据可视化图形语法 图形语法是一种高级工具 可让您以高效且一致的方式创建数据图 它抽象了最底层的细节 让您专注于为数据创建有意义且美观的可视化效果 有几个 Python 包提供
  • MicroPython 入门(概述)

    您对物联网 家庭自动化和互联设备感兴趣吗 你有没有想过建造一把爆能枪 一把激光剑 甚至你自己的机器人会是什么样子 如果是这样 那么您很幸运 微Python可以帮助您完成所有这些事情以及更多 在本课程中 您将了解 这历史微Python的 这差
  • Jupyter 终端及更多

    Jupyter Notebooks 不仅可以让您启动笔记本 在本课程中 您将学习如何启动新终端以及如何在浏览器中创建文件夹或文件
  • 2021 年 8 月 11 日

    主持人大卫 阿莫斯回答会员的问题 本周 Real Python 社区经理 Andres Pineda 也加入了 David 的行列 在这次会议上 我们讨论了 Python 新闻和更新 如何开始使用 Python 进行日志记录 如何学习编写更
  • 适合 Python 程序员的 C

    目录 The C Preprocessor 包括 定义 undef if pragma 错误 Basic C Syntax for Python Programmers 一般的 if 语句 switch 语句 循环 功能 指针 弦乐 结构体
  • 关于约翰·斯特茨

    关于约翰 斯特茨 John 是一位狂热的 Python 爱好者 也是 Real Python 教程团队的成员 约翰的教程 Python 中的模字符串格式化 Python 中的递归 简介 Python 中的函数式编程 何时以及如何使用它 Py
  • pandas 排序方法入门

    有关这些视频中使用的 REPL 的更多信息 您可以查看蟒蛇以及真正的 Python 教程探索 bpython 具有类似 IDE 功能的 Python REPL
  • 漂亮的印花

    此外print Python 包括一个漂亮的印刷品方法 此方法对于以更易于阅读的格式输出有关对象的调试信息特别有用 gt gt gt gt gt gt from pprint import pprint gt gt gt data squa
  • Python 新闻:2021 年 12 月以来的新增内容

    目录 Python 指导委员会选举 Python 新版本 Python 3 6 生命周期结束 代码的出现 Python 的下一步是什么 In 2021 年 12 月 第四个Python指导委员会像往常一样 由新成员和回归成员组成 Pytho
  • 第 12 集:Python 中的网页抓取:工具、技术和合法性

    第 12 集 Python 中的网页抓取 工具 技术和合法性 真正的 Python 播客 2020年6月5日50公尺 RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸
  • 列表:有序和任意

    您已经了解了如何创建列表 在本课程中 您将了解到列表是有序的并且可以包含任意对象的集合 定义列表时使用的顺序在列表的生命周期内保持不变 包含相同元素但顺序不同的列表是不同的 gt gt gt gt gt gt a spam egg baco
  • 在“for”循环中使用 .append() 进行附加处理

    有关本课程所涵盖概念的更多信息 您可以查看 Python enumerate 简化需要计数器的循环 真正的Python文章 Python for 循环 确定迭代 真正的Python文章
  • 设计和指导:Python 中的 OOP(概述)

    编写优秀的面向对象代码不仅仅是如何编写 句法 知道何时和何时不使用它 以及指导原则 在后面面向对象设计将帮助您编写更好的代码 在本课程中 您将了解 中的面向对象方法Python 与其他语言 您的情况不应该使用Python 中的类 继承的替代
  • 使用 Sed 命令在 Linux 中追加文本

    Sed提供根据特定模式或条件将文本附加到文件中的行的能力 您可以使用a 命令输入sed在模式匹配后添加新行 让我们深入研究现实世界的示例 以了解如何有效地利用此功能 目录 hide 1 在匹配的模式后添加一行 2 在匹配的模式后追加多行 3
  • Linux Web 服务器 (Apache) 的安装、配置和故障排除

    在本教程中 我们将具体讨论 Linux Web 服务器或 Apache Web 服务器 以及如何安装和配置它以向其他人提供您的内容 Web 服务器是一个通过 HTTP 协议处理请求的系统 您向服务器请求一个文件 它会响应所请求的文件 这可能