Apache 软件是以模块化方式构建的:除某些核心任务外的所有功能都是通过模块处理的。到目前为止,即使是 HTTP 也是由模块(http_core)处理的。
Apache 模块可以在构建时编译进 Apache 二进制文件中或在运行时动态装载。请参见第 28.4.2 节 “激活和取消激活”以获取有关如何动态装载模块的详细信息。
Apache 模块可以划分为四个不同的类别:
默认情况下,基础模块将编译到 Apache 中。SUSE Linux 的 Apache 中仅编译进了 mod_so(装载其他模块时需要)和 http_core。所有其他对象都可用作共享对象:它们可在运行时被包含,而不是包含在服务器二进制文件本。
通常,扩展模块包含在 Apache 软件包中,但一般不静态编译到服务器中。在 SUSE Linux Enterprise Server 中,它们可用作共享对象,可以在运行时装载进 Apache。
标注为外部的模块不包含在正式 Apache 发行版中。SUSE Linux Enterprise Server 提供了几个现成可用的外部模块。
MPM 负责接受和处理对 Web 服务器的请求,代表 Web 服务器软件的核心。
如果使用默认方法来安装 Apache(如第 28.1.2 节 “安装”中所述),则将安装所有基础和扩展模块、多处理模块 Prefork MPM 以及外部模块 mod_php5 和 mod_python。
可以通过启动 YaST 并选择+来安装其他外部模块。现在请选择+并搜索 apache。在其他包中,结果列表将包含所有可用的外部 Apache 模块。
可使用 YaST 来激活或停用脚本语言模块(PHP5、Perl、Python),模块配置如第 28.2.2.1 节 “HTTP 服务器向导”中所述。可以按第 28.2.2.2.2 节 “服务器模块”中所述启用或禁用所有其他模块。
如果要手动激活或停用模块,则分别使用命令 a2enmod mod_foo 或 a2dismodmod_foo。a2enmod -l 将输出当前所有活动模块的列表。
![]() | 包含外部模块的配置文件 |
|---|---|
如果已经手动激活外部模块,则确保在所有虚拟主机配置中装载其配置文件。外部模块的配置文件位于 | |
Apache 文档中对所有基础模块和扩展模块均进行了详细的描述。此处仅提供大多数重要模块的简短描述。请参见 http://httpd.apache.org/docs/2.2/mod/ 以了解有关每个模块的详细信息。
请求某个特定 MIME 类型(如 application/pdf)、带特定扩展名的文件(如 .rpm)或某个特定请求方法(如 GET)时,提供执行脚本的方法。默认情况下启用此模块。
提供 Alias 和 Redirect 指令,可使用这些指令将 URl 映射到特定目录(别名)或将请求的 URL 重定向到其他位置。默认情况下启用此模块。
身份验证模块提供不同的身份验证方法:基本身份验证 (mod_auth_basic) 或摘要身份验证 (mod_auth_digest)。Apache 2.2 中的摘要身份验证仍处于试验阶段。
mod_auth_basic 和 mod_auth_digest 必须与身份验证提供商模块 mod_authn_*(例如,基于身份验证的文本文件的 mod_authn_file)结合,并与授权模块 mod_authz_*(例如,用户授权的 mod_authz_user)结合。
有关该主题的更多信息可以从“Authentication HOWTO”中获取,网址是 http://httpd.apache.org/docs/2.2/howto/auth.html
当不存在索引文件(例如 index.html)时,Autoindex 将生成目录列表。这些索引的外观是可配置的。默认情况下启用此模块。但是,在默认情况下,目录列表将通过 Options 指令禁用,重写虚拟主机配置中的此设置。此模块的默认配置文件位于 /etc/apache2/mod_autoindex-defaults.conf 处。
执行 CGI 脚本时需要有 mod_cgi。默认情况下启用此模块。
可使用此模块配置 Apache,使其在传递给定文件类型之前实时压缩这些文件类型。
mod_dir 提供 DirectoryIndex 指令,它可用来配置在请求目录时自动传递的文件(默认使用 index.html)。它还能自动重定向到正确的 URl(如果目录请求不包含尾部斜杠)。默认情况下启用此模块。
控制传递到 CGI 脚本或 SSI 页面的环境。环境变量可设置或取消设置,或者从调用 httpd 进程的壳层传递。默认情况下启用此模块。
有了 mod_expires,便可通过发送 Expires 头来控制代理和浏览器缓存刷新文档的频率。默认情况下启用此模块。
mod_include 允许您使用服务器端包含 (SSI),它能提供动态生成 HTML 页面的基本功能。默认情况下启用此模块。
在 http://localhost/server-info/ 下提供服务器配置的完整概述。出于安全考虑,始终应该限制对此 URL 的访问。默认情况下,仅允许 localhost 访问此 URL。mod_info 是在 /etc/apache2/mod_info.conf 处配置的。
使用此模块可配置 Apache 日志文件的外观。默认情况下启用此模块。
mime 模块负责根据文件名的扩展名(例如 text/html 适用于 HTML 文档)传递具有正确 MIME 标题的文件。默认情况下启用此模块。
对于内容协商是必需的。请参见 http://httpd.apache.org/docs/2.2/content-negotiation.html 获取更多信息。默认情况下启用此模块。
提供 mod_alias 的功能,但是功能更全且更为灵活。使用 mod_rewrite,可根据多个规则和请求标题等来重定向 URL。
基于客户机的请求细节(如客户机发送的浏览器字符串或客户机的 IP 地址)来设置环境变量。默认情况下启用此模块。
mod_speling 尝试自动更正 URL 中的印刷错误,例如大小写错误。
在 Web 服务器和客户机之间启用加密连接。有关详细信息,请参见第 28.6 节 “使用 SSL 设置安全性 Web 服务器”。默认情况下启用此模块。
在 http://localhost/server-status/ 下提供有关服务器活动和性能的信息。出于安全考虑,始终应该限制对此 URL 的访问。默认情况下,仅允许 localhost 访问此 URL。mod_status 是在 /etc/apache2/mod_status.conf 处配置的。
mod_suexec 允许您在不同的用户和组下运行 CGI 脚本。默认情况下启用此模块。
在 ~ 下启用可用的特定于用户的目录。必须在配置中指定 user/UserDir 指令。默认情况下启用此模块。
SUSE Linux Enterprise Server 提供了两个不同的多处理模块 (MPM) 供 Apache 使用。
prefork MPM 实现非线程的预生成 Web 服务器。它使 Web 服务器在行为上类似于 Apache 版本 1.x,因为它隔离每个请求并通过生成单独的子进程来处理请求。这样,有问题的请求就不会影响其他请求,避免了 Web 服务器被锁定。
此基于进程的方法 prefork MPM 虽然提供了稳定性,但比相应的 worker MPM 消耗更多的系统资源。prefork MPM 被视为是基于 Unix 操作系统的默认 MPM。
![]() | 本文档中的 MPM |
|---|---|
本文档假设 Apache 使用 prefork MPM。 | |
worker MPM 提供一种多线程 Web 服务器。线程是一种“更小”的进程。线程相对于进程的优点是它占用较少的资源。worker MPM 并非仅生成子进程,还通过在服务器进程中使用线程来处理请求。预生成的子进程是多线程的。此方法相比 prefork MPM,使 Apache 消耗更少的系统资源,从而提高了 Apache 的执行效率。
一个主要缺点是 worker MPM 的稳定性:如果一个线程损坏,进程的所有线程都会受影响。最严重的情况会导致服务器崩溃。特别是在负载很重的情况下,如果将通用网关接口 (CGI) 与 Apache 一起使用,可能由于线程无法与系统资源通信而发生内部服务器错误。将 worker MPM 与 Apache 一起使用的另一个争议是并非所有可用的 Apache 模块都是线程安全的,因此它不能与 worker MPM 结合使用。
![]() | 将 PHP 模块与 MPM 一起使用 |
|---|---|
并非所有可用的 PHP 模块都是线程安全的。强烈建议不要将 worker MPM 与 mod_php 一起使用。 | |
在此处查找随 SUSE Linux Enterprise Server 提供的所有外部模块的列表。在列出的目录中查找模块的文档。
向 Apache 添加支持以将 Novell AppArmor 限制提供给由模块(如 mod_php5 和 mod_perl)处理的独立 CGI 脚本。
包名称:apache2-mod_apparmor |
| 更多信息:第 III 部分 “AppArmor” (↑安全指南) |
使用 mod_mono 允许您在服务器中运行 ASP.NET 页。
包名:apache-mod_mono |
配置文件:/etc/apache2/conf.d/mod_mono.conf |
mod_perl 使您能够在嵌入的解释器中运行 Perl 脚本。服务器中嵌入的持久解释器能够避免启动外部解释器并且不会损失 Perl 启动时间。
包名称:apache2-mod_perl |
配置文件:/etc/apache2/conf.d/mod_perl.conf |
更多信息:/usr/share/doc/packages/apache2-mod_perl |
PHP 是一种服务器端、跨平台 HTML 嵌入式脚本编写语言。
包名称:apache2-mod_php5 |
配置文件:/etc/apache2/conf.d/php5.conf |
更多信息:/usr/share/doc/packages/apache2-mod_php5 |
mod_python 允许将 Python 嵌入到 Apache HTTP 服务器中以增强性能并使基于 Web 的应用程序的设计更为灵活。
包名称:apache2-mod_python |
更多信息:/usr/share/doc/packages/apache2-mod_python |
高级用户可以通过编写自定义模块来扩展 Apache。要开发 Apache 模块或编译第三方模块,就需要 apache2-devel 包以及相应的开发工具。apache2-devel 还包含 apxs2 工具,此工具是编译其他 Apache 模块所必需的。
apxs2 允许从源代码编译和安装模块(包括对配置文件进行必要的更改),这将创建可在运行时装载入 Apache 的动态共享对象 (DSO)。
apxs2 二进制文件在 /usr/sbin 中:
/usr/sbin/apxs2 - 适于构建用于处理任何 MPM 的扩展模块。安装位置为 /usr/lib/apache2。
/usr/sbin/apxs2-prefork - 适用于 prefork MPM 模块。安装位置为 /usr/lib/apache2-prefork。
/usr/sbin/apxs2-worker - 适用于 worker MPM 模块。安装位置为 /usr/lib/apache2-worker。
使用命令 cd /path/to/module/source; apxs2 -cia mod_foo.c(-c 编译模块、-i 安装模块,而 -a 激活模块)从源代码安装和激活模块。apxs2 的其他选项在 apxs2(1) 手册页中有描述。