26.4. 安装、激活和配置模块

Apache 软件以模块形式构建:模块处理除部分核心任务之外的所有功能。到目前为止,即使是 HTTP 也是由模块(http_core)处理的。

Apache 模块可以在构建时编译进 Apache 二进制文件中或在运行时动态装载。请参见第 26.4.2 节 “激活和取消激活”以获取有关如何动态装载模块的详细信息。

Apache 模块可以划分为四个不同的类别:

基础模块

默认情况下,基础模块将编译到 Apache 中。SUSE Linux 中的 Apache 中仅编译了 mod_so(需要装载其它模块)和 http_core。其它对象均可用作共享对象:它们可在运行时包含,而不是包含在服务器二进制自身中。

扩展模块

通常,扩展模块包含在 Apache 软件包中,但一般不静态编译到服务器中。在 SUSE Linux 中,它们可用作共享对象,在运行时装载到 Apache 中。

外部模块

外部标注的模块不包含在正式 Apache 发布版中。SUSE Linux 提供了几个外部模块供用户使用。

多处理模块

MPM 负责接受和处理对万维网服务器的请求,代表万维网服务器软件的核心。

26.4.1. 模块安装

如果使用默认方法来安装 Apache(描述可见第 26.1.2 节 “安装”),则它将装有所有基础和扩展模块、多重处理模块 Prefork MPM 和外部模块 PHP5。

可以通过启动 YaST 并选择软件+软件管理来安装其它外部模块。现在请选择过滤器+搜索 和搜索 apache。在其它包中,结果列表将包含所有可用的外部 Apache 模块。

26.4.2. 激活和取消激活

可使用 YaST 来激活或取消激活带有第 26.2.2.1 节 “HTTP 服务器向导”中描述的模块配置的脚本语言模块(PHP5、Perl、Python 和 Ruby)。可以按第 26.2.2.2.2 节 “服务器模块”中所述启用或禁用所有其它模块。

如果想手工激活或取消激活模块,则请分别使用命令 a2enmod mod_fooa2dismod mod_fooa2enmod -l 将输出当前活动的所有模块的列表。

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

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

26.4.3. 基础模块和扩展模块

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

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 将生成目录列表。这些索引的外观是可配置的。默认情况下启用此模块。但是,在默认情况下,目录列表将通过选项指令禁用,覆盖虚拟主机配置中的此设置。此模块的默认配置文件位于 /etc/apache2/mod_autoindex-defaults.conf 处。

mod_cgi

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

mod_deflate

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

mod_dir

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

mod_expires

有了 mod_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_speling

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

mod_ssl

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

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 指令。默认情况下启用此模块。

26.4.4. 多处理模块

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

26.4.4.1. Prefork MPM

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

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

[Important]本文档中的 MPM

本文档假设 Apache 使用 prefork MPM。

26.4.4.2. Worker MPM

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

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

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

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

26.4.5. 外部模块

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

FastCGI

FastCGI 是适用于 CGI 的一种独立于语言的、可伸缩和开放式扩展件,它性能更加强大,而且不会限制特定于服务器的 API。由于 FastCGI 应用程序是固定的,所以它的运行速度非常快,处理每个请求时,不需要启动和初始化。

软件包名称:apache2-mod_fastcgi
配置文件:/etc/apache2/conf.d/mod_fastcgi.conf
更多信息:/usr/share/doc/packages/apache2-mod_fastcgi
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 服务器中以增强性能并使基于万维网的应用程序的设计更为灵活。

软件包名称:apache2-mod_python
更多信息:/usr/share/doc/packages/apache2-mod_python
mod_ruby

mod_ruby 将 Ruby 解释器嵌入了 Apache 万维网服务器,允许本机执行 Ruby CGI 脚本。与不具有 mod_ruby 的情况相比,这些脚本的启动速度更快。

软件包名称:apache2-mod_ruby
更多信息:/usr/share/doc/packages/apache2-mod_ruby
mod_jk-ap20

此模块将在 Apache 和 Tomcat Servlet Container 之间提供连接程序。

软件包名称:mod_jk-ap20
更多信息:/usr/share/doc/packages/mod_jk-ap20

26.4.6. 编译

高级用户可以通过编写自定义模块来扩展 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 模块。

apxs2 安装的模块可用于所有 MPM。其它两个程序安装的模块只用于各自的 MPM。apxs2 将模块安装在 /usr/lib/apache2apxs2-prefork 中,而 apxs2-worker 将模块安装在 /usr/lib/apache2-prefork/usr/lib/apache2-worker 中。

使用命令 cd /path/to/module/source; apxs2 -cia mod_foo.c-c 编译模块、-i 安装模块,而 -a 激活模块)从源代码安装和激活模块。apxs2 的其它选项在 apxs2(1) 手册页中做了介绍。