下一页 上一页 目录

2. Apache

Apache 是领先的互联网 Web 服务器,根据 Netcraft 调查,其市场份额超过 60%。一些关键因素促成了 Apache 的成功

许多商业供应商在其产品中采用了基于 Apache 的解决方案,包括 OracleRed HatIBM。此外,Covalent 为 Apache 提供附加模块和 24x7 全天候支持。

以下网站使用 Apache 或其衍生版本。如果 Apache 对他们来说足够好,那么对您来说也很可能足够好 :)

>摘自 Apache 网站

Apache HTTP 服务器项目致力于开发和维护适用于现代操作系统的开源 HTTP 服务器,包括 UNIX 和 Windows NT。该项目的目标是提供一个安全、高效且可扩展的服务器,以符合当前 HTTP 标准的方式提供 HTTP 服务。

Apache 最初是作为对 NCSA Web 服务器(最早的 HTTP 服务器之一)的修改而诞生的。您可以在此处了解更多关于 Apache 历史的信息

Apache 项目已经超越了仅仅构建 Web 服务器,发展到开发其他关键的服务器端技术。Apache 软件基金会(在后面的章节中描述)是这些项目的保护伞。

2.1 架构

Apache 有两个主要版本,1.3 系列和 2.0 系列。虽然这两个版本都被认为是生产质量的,但它们在架构和功能上有所不同。

2.1.1 Apache 1.3

Apache 1.3 已被移植到各种 Unix 平台,并且是互联网上部署最广泛的 Web 服务器。

基于进程的 Web 服务器

Unix 上的 Apache 1.3 是一个基于进程的 Web 服务器。Apache 程序在启动时会 fork 多个子进程。 Forking 意味着父进程创建自身的相同副本,称为子进程。每个子进程都可以独立于其他子进程处理请求。这种方法的优点是提高了稳定性:如果其中一个子进程行为不端(失控或内存泄漏),则可以终止它而不会影响其他子进程。稳定性是以性能损失为代价的。在大多数 Unix 操作系统中,创建进程和上下文切换(为每个进程分配处理器时间)是昂贵的操作。由于进程彼此隔离,它们无法轻易共享代码和数据,从而消耗系统资源。

Windows 支持

Apache 1.3 是第一个支持 Windows 的 Apache 版本,尽管该端口的稳定性不如其 Unix 版本。这是因为服务器最初是为 Unix 设计的,而 Windows 端口是后来的附加功能,集成度不高。

模块化

Apache 1.3 具有模块化架构。您可以启用或禁用模块以添加和删除 Web 服务器功能。您可以自定义 Apache 以提高性能和安全性。除了服务器捆绑的模块外,还有大量第三方模块,提供扩展功能。

2.1.2 Apache 2.0

Apache 2.0 是最新和最强大的 Apache 服务器版本。该架构包含比 1.3 系列显着的改进。以下是其中的一些改进。

多处理模块

Apache 2.0 在称为多处理模块 (MPM) 的特殊服务器模块中抽象了请求处理架构。这意味着 Apache 可以配置为纯粹基于进程的服务器、纯粹基于线程的服务器或这些模型的混合体。线程包含在进程内部并同时运行。与进程不同,线程可以共享数据和代码。因此,线程比进程更“轻量级”,在大多数情况下,线程服务器比基于进程的服务器扩展性更好。缺点是服务器的可靠性较低,因为如果一个线程行为不端,它可能会损坏属于其他线程的数据或代码。

协议模块

协议处理已在 Apache 2.0 中封装在其自己的层中。这意味着可以编写模块来服务于 HTTP 以外的协议,例如用于邮件的 POP3 或用于文件传输的 FTP。这些协议模块可以利用可靠的服务器框架和模块功能,例如身份验证和动态内容生成。这意味着,例如,您可以针对 Apache 用于 Web 请求的同一用户数据库对 POP3 用户进行身份验证,并且可以使用 PHP、CGI 或本文档后面解释的任何其他技术动态生成 FTP 内容。

模块和过滤器架构。

Apache 2.0 保持了 1.3 模块化架构,并添加了一个额外的扩展机制:过滤器。过滤器允许模块修改其他模块生成的内容。它们可以加密、扫描病毒或压缩静态文件以及动态生成的内容。

兼容性问题

不幸的是,尽管模块 API 在版本之间相似,但它们并不完全相同,Apache 1.3 模块需要移植到新架构。大多数主流模块(例如 PHP 和 mod_perl)已经有 Apache 2.0 版本,其他模块(例如 mod_dav 和 mod_ssl)现在是服务器发行版的一部分。在线程架构上运行模块需要对模块进行特定更改。与 Apache 一起分发的模块已经过这些更改,被认为是“线程安全”的,但第三方模块或库可能不是。如果您需要其中之一,您将被限制为以纯粹基于进程的服务器运行 Apache。

可移植性

由于 Apache 可移植运行时 (APR) 库,Apache 现在在 Windows 和 Unix 平台上都能同样出色地运行。它抽象了操作系统之间的差异,例如文件或网络访问 API。将 Apache 移植到新平台通常就像移植 Apache 可移植运行时一样简单。此抽象层还提供了特定于平台的调整和优化。

2.2 安全性

Apache 提供了几个与安全相关的模块,用于保护和限制对服务器的访问。

身份验证

身份验证模块允许您确定客户端的身份,通常是通过验证用户名和密码来对照后端数据库。Apache 包含用于针对纯文本和数据库文件进行身份验证的模块。还存在其他身份验证模块,可以将 Apache 连接到现有的安全框架或数据库,包括:NT 域控制器、Oracle、mySQL、PostgresSQL 等等。

LDAP 模块特别有趣,因为它们允许与公司和企业范围内的现有目录服务集成。您可以在 http://modules.apache.org 找到这些模块。可以在 Apache 网站找到 Apache 2.0 LDAP 模块。

访问控制

Apache 提供了 mod_access 模块,该模块可以根据客户端请求的参数(例如特定标头的存在或客户端的 IP 地址或主机名)限制对资源的访问。第三方模块允许您限制对行为不端的客户端的访问,这将在后面关于性能和带宽控制的章节中解释。

SSL/TLS

安全套接字层/传输层安全协议允许加密 Web 服务器和客户端之间的数据。在 Apache 1.3 中,这些协议由 mod_ssl 实现,mod_ssl 与 mod_ssl 网站 分开分发,并且需要对服务器应用补丁。这是由于加密的出口管制造成的。此后,大多数限制都已解除,从 Apache 2.0 开始,mod_ssl 现在作为 Apache 的基本模块包含在内。

2.3 代理

代理是一个代表另一个程序执行请求的程序。有不同类型的 Web 代理。传统的 HTTP 代理,也称为前向代理,接受来自客户端(通常是 Web 浏览器)的请求,联系远程服务器,并返回响应。

反向代理是一个位于其他服务器前面的 Web 服务器,提供统一的前端并从后端 Web 服务器卸载某些任务,例如 SSL 处理。

Apache 支持这两种类型的代理,代理内容的缓存以及不同的代理后端,例如 FTP。

2.4 性能和可扩展性

原始性能只是 Web 服务器中需要考虑的因素之一(灵活性和稳定性通常是首要考虑因素)。

话虽如此,有一些解决方案可以提高服务静态内容的高负载 Web 服务器的性能。如果您从事托管业务,Apache 还提供了一些方法来衡量和控制带宽使用情况。在这种情况下,节流通常意味着根据请求的文件、特定的客户端 IP 地址等来减慢内容的交付速度。这样做是为了防止滥用。

负载均衡

使用 Apache 反向代理和 mod_rewrite,您可以让 Apache 进程在各种后端 Web 服务器之间分配请求。您可以在 https://apache.ac.cn/docs/misc/rewriteguide.html 找到更多信息

此外,mod_backhand 是一个 Apache 1.3 模块,允许从一个 Web 服务器到另一个 Web 服务器的 HTTP 请求的无缝重定向。此重定向可用于定位资源利用率不足的机器,从而提供 Web 请求的细粒度、按请求负载均衡。您可以在 http://www.backhand.org/ 找到更多信息。

压缩

Apache 2.0 包括 mod_deflate,这是一个过滤模块,可以在将内容交付给客户端之前对其进行压缩。这节省了带宽,但可能会对性能产生影响。mod_gzip 模块为 Apache 1.3 提供了此功能

2.5 CGI 脚本

CGI 代表通用网关接口。CGI 程序是外部程序,当用户请求特定页面时会调用这些程序。CGI 程序从 Web 服务器接收信息(表单变量值、浏览器类型、客户端的 IP 地址等),并使用该信息向客户端输出网页。

Apache 支持 CGI,并且有一个第三方 Apache 1.3 模块提供对 FastCGI 协议的支持。它避免了每次请求都启动和停止 CGI 程序相关的性能损失。您可以在 http://fastcgi.com/ 找到它

2.6 开发平台集成

Web 应用程序是用 Java、Perl、C# 等高级语言编写的,Apache 有几个模块将它们与服务器集成。在许多情况下,这些模块公开了 Apache API,因此整个 Apache 模块可以用这些语言编写。

Perl

mod_perl 是最资深和最成功的 Apache 项目之一。它在 Apache 中嵌入了一个 Perl 解释器,并允许从 Perl 访问 Web 服务器内部结构。这允许整个模块用 Perl 或 Perl 和 C 代码的混合编写。在 1.3 Apache 版本中,必须在每个子进程中嵌入一个解释器,因为服务器是基于多进程的。在高流量的动态站点中,增加的大小可能会有所不同。在 Apache 2.0 的线程版本中,mod_perl 允许在解释器之间共享代码、数据和会话状态。这产生了一个更快、更精简的解决方案。

mod_perl 本身就是另一个平台,有各种各样的模块可用,例如 MasonEmbperl 用于在 HTML 页面中嵌入 Perl,以及 AxKit 用于 XML 驱动的模板。

PHP

来自 PHP 网站:PHP 是一种服务器端、跨平台、HTML 嵌入式脚本语言。它是 Apache 最流行的模块,这归因于多种原因

PHP 具有模块化设计。在众多其他模块中,有一些模块提供对以下内容的支持您只需要编译/使用您需要的模块。PHP 可以与 Apache 一起使用,作为外部 CGI 或与其他 Web 服务器一起使用。它是跨平台的,可以在大多数版本的 Unix 和 Windows 上运行。如果您来自 Windows 背景,您可能使用过带有 Active Server Pages 和 MS-SQL Server 的 Internet Information Server。在 Unix 世界中,这种三巨头的常见替代品是带有 PHP 和 MySQL 的 Apache。由于 PHP您可以从以 Microsoft 为中心的解决方案平稳地迁移到基于 Unix 的解决方案。

Python

Python 是一种流行的面向对象脚本语言。Mod_Python 现在是 Apache 的官方项目,它允许您将 Python 与 Apache Web 服务器集成。您可以开发复杂的 Web 应用程序或加速现有的 Python CGI 脚本。最新版本在 Apache 2.0 上运行。

Tcl

Tcl Apache 项目将 Tcl 与 Apache Web 服务器集成。Tcl 是一种轻量级、可扩展的脚本语言。您可以在此处了解更多关于 Tcl 的信息。目前在 Apache Tcl 保护伞下有几个模块

Microsoft 技术

几个模块允许与 Microsoft 语言和技术集成,例如 .Net 框架或 Active Server Pages。

.Net

mod_haydnMono 与 Apache 集成,并将 Apache API 公开给 .Net 框架,允许您例如用 C# 编写模块。Covalent 提供了 mod_asp.net,这是一个商业 Windows 模块,允许 Apache 运行 ASP.Net 应用程序,从而允许您替换 Microsoft IIS。

ASP

ASP 代表 Active Server Pages,是一种 Microsoft 技术,允许您在 HTML 页面中嵌入代码,通常是 Visual Basic。几家公司,如 ChilliSoftStryon 提供了可以在 Unix 环境中运行 ASP 应用程序的产品。

ISAPI

ISAPI 是一个 API,您可以像使用 Apache API 一样使用它来扩展 Microsoft IIS。Apache 包含一个模块 mod_isapi,它镜像了此功能,并允许您运行 ISAPI 模块。

Java

大多数应用程序服务器,例如 Oracle、IBM 和 BEA 的应用程序服务器,都提供了与 Apache Web 服务器集成的模块。此外,几个模块(如 mod_jk 和 mod_webapp)允许您连接到 Tomcat,Tomcat 是一个 Servlet 和 JavaServer Pages 容器,也是 Apache 软件基金会的一部分。

其他语言的模块

本文档介绍了用于流行的服务器端语言(如 Perl、Python 和 PHP)的模块。您可以在 Apache 模块目录中找到其他语言模块(JavaScript、Haskell、Ruby 等)。

2.7 管理

Web 服务器管理的重要组成部分包括构建、配置和监控不同的服务器。

构建工具

Apache 可以通过许多不同的方式进行扩展和自定义。将不同的模块与服务器集成有时可能是一项困难的任务。诸如 Apache Toolbox 之类的工具可以通过提供菜单驱动的构建框架来简化此任务。

Apache 的用户界面

Apache 是通过文本配置文件配置的,有时这可能很困难,特别是对于来自 Windows 背景的人来说。有一些开源图形工具可以简化此任务

SNMP

SNMP 代表简单网络管理协议。它允许监控和管理网络服务器、设备等等。用于 Apache 的 SNMP 模块有助于管理大型 Web 服务器部署,衡量提供的服务质量以及将 Apache 与现有管理框架集成。

2.8 发布

Web 内容的作者需要一种管理该内容并将其上传到服务器的方法。用于此目的的协议之一是 DAV(分布式创作和版本控制)。DAV 是 HTTP 协议的扩展,它使用户和应用程序能够发布和修改 Web 内容。DAV 技术得到了广泛应用,Microsoft 在操作系统级别(WebFolders)和 Office 套件中都支持它。Apple OS-X 和来自 Adobe、Oracle 等的各种第三方产品也是如此。您可以在 http://www.webdav.org/mod_dav/ 获取 Apache 1.3 的 mod_dav 模块。在 Apache 2.0 中,mod_dav 包含在基本发行版中。

在 DAV 之前,Microsoft 有自己的发布协议,与 Microsoft FrontPage 工具集成。您可以使用 http://www.rtr.com/Ready-to-Run_Software/ 的模块添加对 Frontpage 的服务器端支持,尽管由于它们与 Apache 的集成方式,它们被认为是不安全的。

2.9 协议模块

Apache 2.0 引入了协议模块的概念。这意味着开发人员可以重用 Apache 服务器框架来实现新的协议,例如处理邮件和文件传输的协议。mod_ftp 是来自 Covalent 的基于 Apache 的商业 FTP 模块。mod_pop3 是一个开源模块,它实现了 POP3 协议,邮件阅读器通常使用该协议从邮件服务器检索邮件。

2.10 虚拟主机

Apache 提供了广泛的虚拟主机支持,这意味着您可以从单个服务器提供多个网站。在 Apache 2.0 中,使用 per-child MPM,您可以拥有多个子进程,每个子进程在不同的 Unix 用户 ID 下服务于不同的域。这对于共享托管场景中的安全性非常重要,因为它允许您将客户彼此隔离。以下是其他可选的虚拟主机模块。

2.11 商业支持

Apache 是许多商业实体(包括大型企业)首选的 Web 服务器。这些公司在采用一项技术时,特别是当该技术处于其互联网战略的核心(例如 Web 服务器)时,有一定的要求。这些要求包括性能、稳定性、管理功能、支持、专业服务以及与遗留系统的集成。许多商业公司,例如 IBMRed HatCovalent,提供必要的产品和服务,使 Apache 满足企业客户的需求。

此外,许多其他公司和 OEM 将 Apache 作为捆绑的 Web 服务器与他们的产品一起发货。


下一页 上一页 目录