Apache Httpd Server
2010-07-28 09:22:50 阿炯

Apache HTTP Server是世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,是最流行的HTTP服务器软件之一。快速、可靠、可通过简单的API扩展,Perl/Python解释器可被编译到服务器中,完全免费,完全源代码开放。如果需要创建一个每天有数百万人访问的Web服务器,Apache可能是最佳选择。采用C语言开发并在ApacheV2协议下授权。

Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自"a patchy server"的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持 SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站都能看到Apache的影子,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。

Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。

特性:
支持最新的HTTP/1.1通信协议
拥有简单而强有力的基于文件的配置过程
支持通用网关接口
支持基于IP和基于域名的虚拟主机
支持多种方式的HTTP认证
集成Perl处理模块
集成代理服务器模块
支持实时监视服务器状态和定制服务器日志
支持服务器端包含指令(SSI)
支持安全Socket层(SSL)
提供用户会话过程的跟踪
支持FastCGI和通过第三方模块可以支持Java Servlets
如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。

最新版本:2.4
Apache HTTP Server 2.4修正大量Bug,按惯例先在开发目录放出然后移动到正式目录,2.4是目前官方推荐产品系列,遗留产品线2.2.26/2.0.65/1.3已停止开发支持。主要是安全更新,新特性和 bug 修复。2.4.43此版本主要是修复安全漏洞以及内存泄露相关的错误:
修复 CVE-2020-1934 安全漏洞:mod_proxy_ftp 在代理至恶意 FTP 服务器时可能会使用未初始化的内存。受影响版本为 Apache HTTP Server 2.4.0 至 2.4.41
修复 CVE-2020-1927 安全漏洞:用于自引用(self-referential )且使用 mod_rewrite 进行配置的重定向可能会被编码后的 newlines 所欺骗,并重定向到目标之外的 URL 而非所请求的 URL。受影响版本为 Apache HTTP Server 2.4.0 至 2.4.41
mod_ssl:修复 OCSP stapling 响应的内存泄漏问题

2.4.x 需要 Apache Portable Runtime(APR)最低版本 1.5.x 和 APR-Util 最低版本 1.5.x. 某些功能可能需要 APR 和 APR-Util 的 1.6.x 版本,必须升级 APR 库才能使 httpd 的所有功能正常运行。此版本基于并扩展了 Apache 2.2 API。为 Apache 2.2 运行需要重新编译为 Apache 2.2 编写的模块,并且需要很少或不需要更改源代码。在升级或安装此版本时,请记住,如果打算将它与其中一个线程 MPM(Prefork MPM 除外)一起使用,则必须确保你将使用的任何模块(以及它们所依赖的库)是线程安全的。2.2.x 分支现在已经过了 Apache HTTP Server 项目的生命周期,并且不会再发生任何变动,包括安全补丁。用户必须及时完成对 httpd 的 2.4.x 版本的过渡,以便从进一步的错误修复或新功能中受益。

2020年08月,Apache HTTP Server 2.4.46 已发布,此版本修复了安全问题和部分 bug,以及增强功能。
SECURITY: CVE-2020-11984
mod_proxy_uwsgi: 恶意请求可能导致在恶意进程环境下运行的服务器出现信息泄露或 RCE 漏洞
SECURITY: CVE-2020-11993
mod_http2: 当连接请求被限制时,记录可能导致并发、不安全使用内存池的语句
mod_http2: 为'Cache-Digest' header 请求特定的值会导致服务器在之后尝试使用 HTTP/2 对资源进行 PUSH 时出现崩溃
mod_proxy_fcgi:修复 Windows 平台出现的构建警告问题

Apache HTTP Server 2.4.51 已于2021年10月中旬发布,主要是修复了在 2.4.50 中发现的安全问题,因此主要的变动是在 2.4.50 中,包括修复安全问题和部分 bug以及增强功能。
mod_rewrite: 修复 [P] 规则的 UDS ("unix:") scheme
event mpm: 如果子进程由于 MaxConnectionsPerChild 而死亡,可正确地计算父进程中的活动子进程
mod_http2: 当一个服务器被优雅地重新启动时,任何空闲的 h2 worker 线程都会被立即关闭。另外,针对 OpenSSL 3.0 中的弃用情况,改变了 OpenSSL API 的使用方式,增加了所有其他的、从未提议过的代码修改,以便对 http2 源进行干净的同步
mod_dav: 正确处理由 dav providers 在 REPORT 请求中返回的错误
core: 不在二级连接上安装核心输入/输出过滤器
core: 添加 ap_pre_connection() 作为 ap_run_pre_connection() 的封装器,用它来防止运行 pre_connection 钩子的失败导致事后崩溃
mod_speling: 添加 CheckBasenameMatch PR 44221
更多详情查看发行说明

2.4.x 的漫长生命周期

Apache httpd 2.4 在 2012 年推出了首个版本 (2.4.0),目前最新的稳定版是2023年4月发布的 2.4.57。也就是说 2.4.x 这个分支已经有十多年的历史 —— 并且在这期间没有发布它的下一个大版本更新。有开发者感叹道,在软件版本定期变动的世界中,2.4.x 以异常长寿的方式脱颖而出。虽然这不是一件坏事,但确实看起来很不寻常。还认为 2012 年的 2.4.0 与 2023 年的 2.4.57 实际上已经不再是同一个软件。比如其中的某些版本添加了对 WebSocket 的支持(2.4.6)、添加 mod_http2 以支持 HTTP/2(2.4.17),以及其他新功能等等。

这样来看,httpd 2.4.x 确实已经迭代添加了许多新功能。不过由于它采用语义化版本管理策略,如果没有出现重大变更(比如和旧版本不兼容),不会修改主版本号。2.4.x 一直都是在修复漏洞,以及增加一些新特性,因此按照指南,它并没达到修改主版本号的要求。目前看来,如果 Apache httpd 继续以这种方式发展以支持未来的 Web 更改,例如 HTTP/3(假设 Apache 对它们有足够的需求),可能需要很长时间才能看到 Apache 2.6。


项目主页:http://httpd.apache.org/

该文章最后由 阿炯 于 2023-05-22 16:11:25 更新,目前是第 3 版。