安装、激活和配置模块

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_fooa2dismodmod_fooa2enmod -l 将输出当前所有活动模块的列表。

[Important]包含外部模块的配置文件

如果已经手动激活外部模块,则确保在所有虚拟主机配置中装载其配置文件。外部模块的配置文件位于 /etc/apache2/conf.d/ 下,并且在默认情况下不装载。如果每个虚拟主机上都需要相同的模块,则可以从此目录包含 *.conf。否则包含各个文件。请参见 /etc/apache2/vhost.d/vhost.template 获取示例。

基础模块和扩展模块

Apache 文档中对所有基础模块和扩展模块均进行了详细的描述。此处仅提供大多数重要模块的简短描述。请参见 http://httpd.apache.org/docs/2.2/mod/ 以了解有关每个模块的详细信息。

mod_actions

请求某个特定 MIME 类型(如 application/pdf)、带特定扩展名的文件(如 .rpm)或某个特定请求方法(如 GET)时,提供执行脚本的方法。默认情况下启用此模块。

mod_alias

提供 AliasRedirect 指令,可使用这些指令将 URl 映射到特定目录(别名)或将请求的 URL 重定向到其他位置。默认情况下启用此模块。

mod_auth*

身份验证模块提供不同的身份验证方法:基本身份验证 (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

mod_autoindex

当不存在索引文件(例如 index.html)时,Autoindex 将生成目录列表。这些索引的外观是可配置的。默认情况下启用此模块。但是,在默认情况下,目录列表将通过 Options 指令禁用,重写虚拟主机配置中的此设置。此模块的默认配置文件位于 /etc/apache2/mod_autoindex-defaults.conf 处。

mod_cgi

执行 CGI 脚本时需要有 mod_cgi。默认情况下启用此模块。

mod_deflate

可使用此模块配置 Apache,使其在传递给定文件类型之前实时压缩这些文件类型。

mod_dir

mod_dir 提供 DirectoryIndex 指令,它可用来配置在请求目录时自动传递的文件(默认使用 index.html)。它还能自动重定向到正确的 URl(如果目录请求不包含尾部斜杠)。默认情况下启用此模块。

mod_env

控制传递到 CGI 脚本或 SSI 页面的环境。环境变量可设置或取消设置,或者从调用 httpd 进程的壳层传递。默认情况下启用此模块。

mod_expires

有了 mod_expires,便可通过发送 Expires 头来控制代理和浏览器缓存刷新文档的频率。默认情况下启用此模块。

mod_include

mod_include 允许您使用服务器端包含 (SSI),它能提供动态生成 HTML 页面的基本功能。默认情况下启用此模块。

mod_info

在 http://localhost/server-info/ 下提供服务器配置的完整概述。出于安全考虑,始终应该限制对此 URL 的访问。默认情况下,仅允许 localhost 访问此 URL。mod_info 是在 /etc/apache2/mod_info.conf 处配置的。

mod_log_config

使用此模块可配置 Apache 日志文件的外观。默认情况下启用此模块。

mod_mime

mime 模块负责根据文件名的扩展名(例如 text/html 适用于 HTML 文档)传递具有正确 MIME 标题的文件。默认情况下启用此模块。

mod_negotiation

对于内容协商是必需的。请参见 http://httpd.apache.org/docs/2.2/content-negotiation.html 获取更多信息。默认情况下启用此模块。

mod_rewrite

提供 mod_alias 的功能,但是功能更全且更为灵活。使用 mod_rewrite,可根据多个规则和请求标题等来重定向 URL。

mod_setenvif

基于客户机的请求细节(如客户机发送的浏览器字符串或客户机的 IP 地址)来设置环境变量。默认情况下启用此模块。

mod_speling

mod_speling 尝试自动更正 URL 中的印刷错误,例如大小写错误。

mod_ssl

在 Web 服务器和客户机之间启用加密连接。有关详细信息,请参见第 28.6 节 “使用 SSL 设置安全性 Web 服务器”。默认情况下启用此模块。

mod_status

在 http://localhost/server-status/ 下提供有关服务器活动和性能的信息。出于安全考虑,始终应该限制对此 URL 的访问。默认情况下,仅允许 localhost 访问此 URL。mod_status 是在 /etc/apache2/mod_status.conf 处配置的。

mod_suexec

mod_suexec 允许您在不同的用户和组下运行 CGI 脚本。默认情况下启用此模块。

mod_userdir

~user/ 下启用可用的特定于用户的目录。必须在配置中指定 UserDir 指令。默认情况下启用此模块。

多处理模块

SUSE Linux Enterprise Server 提供了两个不同的多处理模块 (MPM) 供 Apache 使用。

Prefork MPM

prefork MPM 实现非线程的预生成 Web 服务器。它使 Web 服务器在行为上类似于 Apache 版本 1.x,因为它隔离每个请求并通过生成单独的子进程来处理请求。这样,有问题的请求就不会影响其他请求,避免了 Web 服务器被锁定。

此基于进程的方法 prefork MPM 虽然提供了稳定性,但比相应的 worker MPM 消耗更多的系统资源。prefork MPM 被视为是基于 Unix 操作系统的默认 MPM。

[Important]本文档中的 MPM

本文档假设 Apache 使用 prefork MPM。

Worker MPM

worker MPM 提供一种多线程 Web 服务器。线程是一种“更小”的进程。线程相对于进程的优点是它占用较少的资源。worker MPM 并非仅生成子进程,还通过在服务器进程中使用线程来处理请求。预生成的子进程是多线程的。此方法相比 prefork MPM,使 Apache 消耗更少的系统资源,从而提高了 Apache 的执行效率。

一个主要缺点是 worker MPM 的稳定性:如果一个线程损坏,进程的所有线程都会受影响。最严重的情况会导致服务器崩溃。特别是在负载很重的情况下,如果将通用网关接口 (CGI) 与 Apache 一起使用,可能由于线程无法与系统资源通信而发生内部服务器错误。将 worker MPM 与 Apache 一起使用的另一个争议是并非所有可用的 Apache 模块都是线程安全的,因此它不能与 worker MPM 结合使用。

[Warning]将 PHP 模块与 MPM 一起使用

并非所有可用的 PHP 模块都是线程安全的。强烈建议不要将 worker MPM 与 mod_php 一起使用。

外部模块

在此处查找随 SUSE Linux Enterprise Server 提供的所有外部模块的列表。在列出的目录中查找模块的文档。

mod-apparmor

向 Apache 添加支持以将 Novell AppArmor 限制提供给由模块(如 mod_php5 和 mod_perl)处理的独立 CGI 脚本。

包名称:apache2-mod_apparmor
更多信息:第 III 部分 “AppArmor” (↑安全指南)
mod_mono

使用 mod_mono 允许您在服务器中运行 ASP.NET 页。

包名:apache-mod_mono
配置文件:/etc/apache2/conf.d/mod_mono.conf
mod_perl

mod_perl 使您能够在嵌入的解释器中运行 Perl 脚本。服务器中嵌入的持久解释器能够避免启动外部解释器并且不会损失 Perl 启动时间。

包名称:apache2-mod_perl
配置文件:/etc/apache2/conf.d/mod_perl.conf
更多信息:/usr/share/doc/packages/apache2-mod_perl
mod_php5

PHP 是一种服务器端、跨平台 HTML 嵌入式脚本编写语言。

包名称:apache2-mod_php5
配置文件:/etc/apache2/conf.d/php5.conf
更多信息:/usr/share/doc/packages/apache2-mod_php5
mod_python

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) 手册页中有描述。