Apache 服务器(或 HTTPd)目前为大约 35% 的 Web 服务器提供支持。它是目前最流行的 Web 服务器之一,为大量网页提供服务。然而,Nginx 等其他服务器正在迅速缩小差距。最明显的迹象是,越来越多的人开始在Nginx 平台上进行开发和维护。
21 世纪初期,Apache 处于巅峰状态,几乎占据了所有活跃网站的一半。是什么让它在过去十年中保持着如此激烈的竞争?
Apache 的历史和创建
Apache网络服务器软件最初由罗伯特·麦库尔 (Robert McCool) 开发。麦库尔最初为美国国家超级计算应用中心 (NCSA)开发HTTPd, 1994 年他与其他几位开发人员一起离职。他们组建了核心团队,即后来的 Apache 集团。
关于该软件的名称,有两种未经证实的理论。第一种说法是,该团队想向美洲原住民阿帕奇部落致敬。第二种解释是,开发人员认为该软件是“补丁的集合”,因此得名“Apache 服务器”。
自1995 年构建和发布以来,它迅速流行起来,到 1996 年初至年中,它已成为世界上最受欢迎的 Web 服务器。当时它的迅速崛起部分归因于Linux 作为服务器平台的日益普及。
它还具有当时许多令人满意的功能,包括能够轻松支持基于 IP 的虚拟主机。后来的虚拟主机不仅能够支持基于 IP 的虚拟主机,还能支持基于名称的虚拟主机。
最终,Apache Web 服务器大受欢迎,满足了用户对适合多种用途(包括 Web)的开源软件的需求。如今,Apache Web 服务器的开发由 Apache软件基金会负责监督。
Apache 到底是什么?
Apache 是按照开源理念构建的 Web 服务器软件。Web 服务器软件帮助接收连接请求并处理这些请求。当用户在 Web 浏览器中输入网页地址时,该查询将直接发送到 Apache Web 服务器。
术语“Web 服务器”是通用的,实际上是指能够执行 Apache 所构建任务的机器。但是,它不仅仅由Web 服务器软件组成。
完整的 Web 服务器将包括硬件(例如 CPU、内存和存储空间)以及操作系统 (OS)。Apache等 Web 服务器软件位于操作系统之上,旨在处理外部请求。
值得注意的是,核心 Apache Web 服务器开发并不是为了运行 Web 应用程序。
Apache 服务器 – 主要功能
免费且开源
Apache 服务器作为开源软件有两个关键含义。第一,它是免费分发的。不涉及商业许可。第二,源代码可广泛使用,并开放供协作使用。
多操作系统支持
Apache 服务器是多平台的,这意味着它可以部署在多种类型的操作系统上使用。由于其根源,它主要在 Linux 上运行。但是,它也能够在 Microsoft Windows 和其他系统上运行。
由于BeOS 和 TPF 等操作系统的流行度逐渐下降,Apache 已减少对它们的支持。然而,多平台支持也意味着 Apache Web 服务器能够处理许多不同编程语言的代码。
开箱即用的良好性能
Apache 服务器受欢迎的原因除了开源和跨平台之外还有许多。例如,一个关键特性是它几乎不需要修改就能应对大量流量。
Apache 的核心支持大多数常见的 Web 服务器功能,包括服务器端包含 (SSI)、通用网关接口 (CGI)、URL 重定向、代理缓存和用户身份验证。
简而言之,Apache 是;
- 免费且开源
- 不受许可限制
- 支持多平台
- 能够应对高流量
- 高度可配置
灵活性和模块化
Apache 还因其双向模块化而备受青睐。那些希望增加功能的人可以使用模块。或者,那些寻求轻量级部署的人可以将其精简到最低操作要求。它管理模块的方式是 Apache 的最大优势之一。
然而, Apache 的灵活性并不止于功能扩展或模块精简。它也是最容易安装和管理的 Web 服务器软件之一。这也使其易于迁移,只需极少修改配置文件即可完成部署迁移。
在支持方面,人们的看法存在分歧,因为从商业角度来看,它只能通过第三方获得。与 Nginx 等 Web 服务器不同,它没有针对业务部署的直接支持渠道。然而,这也可以看作是让企业在选择供应商时拥有更大的灵活性。
广泛的生态系统
Apache是基于 Linux 构建的,是市场上文档最齐全的 Web 服务器软件之一。如果文档中没有涵盖某些内容,则可能不是问题。
尽管如此,由于其历史悠久和广泛使用,Apache 用户也拥有庞大的全球社区。有大量的社区支持可供随时获得帮助。
Apache 服务器性能
之前我提到过,Apache 服务器的吸引力之一在于它能够轻松地通过模块进行扩展。它之所以能做到这一点,是因为其核心是独立的。不幸的是,Apache 核心本身有一个小小的缺点。
Apache 核心的原始设计使用了一种称为 prefork 的处理模型,该模型为每个连接分配一个进程(或线程)。由于当今服务器硬件的强大功能和网络流量,该模型已成为 Apache 的一个明显弱点。
确实存在优化,例如使用多处理模块,但 Apache 对于高流量网站来说效果并不好。通常,Apache 被认为是每小时接收请求少于 1,000 个的网站的理想选择。
与许多其他 Web 服务器相比,Apache 需要处理每个连接中大量的请求。(图片来源:RootUsers)
问题源于Apache 使用 .htaccess 文件来存储其部分配置数据。每次发出请求时,都需要读取该文件。在大量请求时,它会成为 I/O 方面的瓶颈。
正因为如此,Apache 的主要竞争对手 Nginx 的运行速度据称要快 2 到 2.5 倍。
内容处理:静态与动态
在互联网发展的早期,大多数网站仅提供静态内容。此类内容的交付相当简单 – 请求和服务。如今,得益于 Web 应用程序和不同脚本的使用,提供动态内容的网站已变得很普遍。
动态网站之所以受欢迎,是因为它们能够处理复杂的行为。这些网站通常具有高度交互性,并且可以即时定制以满足各种需求。正如您所预料的,处理这两种内容的 Web 服务器需求并不相同。
由于提供静态内容的简单性,Apache(以及大多数其他 Web 服务器)采用了非常直接的方法。收到请求时,网站只是“按原样”提供服务。在处理动态内容方面,Apache 走了自己的路。
Apache 尝试采用一种非常简单的方式来处理动态内容,即直接读取动态内容。然后它会将这些结果作为对原始查询的响应。这样一来,Apache 服务器软件的实施过程就变得容易得多。
问题在于它需要模块来解释动态文件,因为内核不是为处理动态文件而设计的。这会导致效率不理想,尤其是在负载增加时。
Apache 服务器安全
与大多数服务器软件一样,Apache 的设计也是安全的。然而,与几乎所有连接的东西一样,仍然存在被黑客攻击和利用的可能性。在 Apache 服务器的生命周期中,这一点已被多次证明。
最近的漏洞示例(现已修补)是 CVE-2019-0211。该漏洞是由一名研究人员发现的,它可能使攻击者能够获得对服务器的完全 root 访问权限。
这些缺陷与 Apache 服务器设计方式可能存在的漏洞同时存在。默认 Apache 服务器部署中的一些潜在弱点包括:
- 启用目录列表
- 缺乏 SSL 加密
- 运行守护进程的用户和组
- 服务器生成的文档页脚中的配置信息
- 包含可能不必要的模块
强化 Apache 安全性
尽管具有固有的稳健性,但需要注意的是,技术团队应采取进一步措施来强化 Apache 服务器部署。这将涉及更改默认设置以及安装其他安全模块,尤其是mod_security。
基本强化活动至少应包括:
- 安装 mod_evasive – 此重要模块用于帮助 Apache 服务器减轻分布式拒绝服务 (DDoS) 以及暴力攻击的影响。其工作原理是将失败的多次登录尝试列入黑名单,并帮助监控已记录的负面 IP 地址。
- 维护 HTTP 限制– 另一个 DDoS 缓解实用程序,设置这些限制将有助于抵御此类攻击的最基本概念 – 大量请求。简单但非常有效。
- 删除未使用的模块——虽然这是跨平台使用的常见策略,但 Apache 因其注重模块化而更具优势。它的精简能力使用户能够严格限制正在使用的模块数量,从而降低风险状况
- 拒绝目录索引– 访问根目录是造成许多危害的根源,禁用此功能可以帮助保护主目录的内容。
- 隐藏服务器配置详细信息– 攻击者掌握的有关服务器的信息越少,情况就越好。不幸的是,有些情况下 Apache 倾向于附加这些信息,而这些情况需要加以防范。
- 禁用覆盖 .htaccess 的功能– 此核心文件对于许多网站至关重要,尤其是如今非常流行的 WordPress 网站。除非有特殊原因,否则请确保服务器锁定此文件。
- 部署 Mod SSL – 遗憾的是,Apache 服务器不支持开箱即用的 SSL 网页。为此,您需要使用 mod SSL,它使用 OpenSSL 进行加密。
请注意,强化活动有时依赖于 Apache http 服务器版本。
Apache 服务器进一步开发
Apache httpd 的当前最新版本是 2.4.46 版。然而,这更像是一个小更新,其中包含少量针对 CVE-2020-11984、CVE-2020-11993 的安全更新,以及对 mod_http2 的轻微修改。
Apache 服务器的最后一个主要版本是 2.4,距今已近十年。2.4 版主要是为了迎合当时向云技术的转变,并优化 Apache 在这些平台上的性能。
要真正了解 Apache 服务器的发展方向,就需要了解Apache 基金会作为一个实体,坚信开放且可互操作的互联网。随着各大行业领导者纷纷推崇各自独有的技术风格,这已日益成为一项挑战。
开发和维护 Apache 的人认为,这些行为破坏了 Apache 服务器最初得以发展的基础。未来大部分时间将用于应对这些挑战,并试图避免货币化驱动产品创造的情况。
据 Apache 核心创始人介绍,这些尝试的一部分将涉及积极参与教育课程、交流和加强社区内的支持。
版本历史
- 1995 年 4 月 – Apache HTTP Server 0.6.2 版本首次公开发布。
- 1995 年 6 月 – 切换到具有模块化结构和 API 的新型“Shambhala”服务器基础架构。
- 1999 年 3 月——Apache 软件基金会成立
- 2001 年 12 月 – Apache 1.0 发布。
- 2002 年 4 月 – Apache 2.0 发布,支持过滤 I/O 和 IPv6。
- 2004 年 1 月 – 代码库重新获得 Apache 2.0 许可
- 2005 年 12 月 – Apache 2.2 发布
- 2009 年 9 月 – Apache 为超过 54.48% 的网站提供服务。
- 2000 年 3 月 – Apache 2.0 Alpha 1 版本推出,并对服务器架构进行了彻底的重新设计。
- 2002 年 4 月 – 更灵活的 API 授权、改进的缓存和代理模块。
- 2011 年 8 月 – Apache 2.2.20 版本修复了“Apache Killer”DoS 错误。
- 2012 年 12 月 – 发布 2.4 版。这是六年来的首个主要版本,旨在提高云性能。
- 2015 年 10 月 – 增加了对 HTTP/2 的支持
- 2019 年 4 月 – 2.4.39 更新修补了包括 Carpe Diem 漏洞在内的六个缺陷。
- 2020 年 8 月 – 发布版本 2.4.46
结论
毫无疑问,Apache 服务器已经成长为一个横跨全球的巨头。然而,技术的发展并不完全有利于开源和互操作性。随着网络工作方式进入下一个十年,
Apache 核心的弱点也受到更多关注。除非Apache 再次进行革命并考虑对其核心进行另一次改造,否则Nginx 等竞争对手很可能会在该业务中进一步领先。