Apache 2.0手册中文版翻译项目 [本文译者: Daniel * ]

项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版

 


mod_ldap - Apache HTTP服务器
<-
Apache主站 > HTTP服务器 > 文档 > 2.0版本 > 模块索引

Apache模块 mod_ldap

说明:为其它LDAP模块提供LDAP连接池和结果缓冲服务
状态:Experimental
模块名:ldap_module
源文件:util_ldap.c
兼容性:在2.0.41及以后版本中提供

概要

本模块通过后端连接LDAP服务来改善网站性能。除了标准LDAP库提供的功能外,本模块增加了一个LDAP连接池和一个LDAP共享内存缓冲区。

为了使用本模块的功能,LDAP支持必须编译进apr-util。这是通过在编译Apache时,在./configure脚本命令行上增加--with-ldap开关来实现的。

为了支持SSL,需要mod_ldap 模块连接以下一个LDAP SDK: OpenLDAP SDK (1.x 和 2.x), Novell LDAP SDK iPlanet(Netscape)

指令索引

主题

top

配置示例

下面的配置是一个使用mod_ldap 模块来提升mod_auth_ldap 提供的HTTP基础鉴定功能的性能的例子。

# 开启LDAP连接池及共享内存缓冲。
# 开启LDAP缓冲状态处理器。需要载入mod_ldap和mod_auth_ldap模块。
# 把"yourdomain.example.com"改为你真实的域名。

LDAPSharedCacheSize 200000
LDAPCacheEntries 1024
LDAPCacheTTL 600
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 600

<Location /ldap-status>
SetHandler ldap-status
Order deny,allow
Deny from all
Allow from yourdomain.example.com
AuthLDAPEnabled on
AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one
AuthLDAPAuthoritative on
require valid-user
</Location>

top

LDAP连接池

LDAP连接是在请求之间共享的。这就允许LDAP服务器在跳过unbind->connect->rebind这样一个工作周期的情况下,保留连接以减少为下一次请求准备连接的时间。这种性能优化有点象HTTP服务的keepalives功能。

在一个比较繁忙的服务器上,很有可能许多请求同时尝试与同一个LDAP服务进行连接并得到它的服务。如果一个LDAP连接正在使用,Apache会在原来连接的基础上,生成一个新的连接。这将确保连接池不会成为瓶颈。

不需要在Apache配置中,手动开启连接池功能。任何使用本模块来访问LDAP服务的模块会自动共享连接池。

top

LDAP缓冲

为了改善性能,mod_ldap 模块使用一种积极的缓冲策略以尽量减少与LDAP服务器的联系。通过缓冲,可以方便地使Apache在提供受mod_auth_ldap保护的页面时,得到二倍或三倍的吞吐量。同时,LDAP服务器的负载也会明显地减小。

mod_ldap 支持两种类型的LDAP缓冲。在search/bind阶段,使用一个search/bind缓冲,在compare阶段,使用两个operation缓冲。服务器引用的每个LDAP URL都有它自己的一组如上所述的三个缓冲。

Search/Bind 缓冲

处理一个查询和绑定操作对LDAP实施来讲,是非常耗时,尤其当目录很大时,这一点更加明显。Search/bind缓冲用来缓冲所有的最终能成功绑定的查询。失败的结果(比如:不成功的查询,或查询结果无法成功绑定)不会被缓冲。这样做是因为信任关系失败的连接在所有连接中只占了很小的一个百分比,因此,通过不缓冲这些连接,可以减少缓冲区的大小。

mod_ldap 在缓冲区里储存了用户名,得到的DN,用来绑定的口令,以及绑定的时间。当一个新的连接用同一个用户名来初始化的时候,mod_ldap将新的连接的口令与保存在缓冲区里的口令进行比较。如果口令匹配,并且那个缓冲项目不是太旧的话,mod_ldap就跳过search/bind阶段。

查询与绑定缓冲由LDAPCacheEntries 指令和LDAPCacheTTL 指令来控制。

Operation缓冲

在区分与辨别过程中,mod_ldap使用两个操作缓冲区来缓冲比较的操作。第一个缓冲区用来缓冲是否LDAP组成员的测试结果,第二个用来缓冲不同名字间鉴别的比较结果。

这两个缓冲区都是由LDAPOpCacheEntries 指令和LDAPOpCacheTTL 指令来控制的。

缓冲区的监控

mod_ldap 包含了一个完整的处理器,通过它可以使管理员监控缓冲区的性能。这个处理器的名字是:ldap-status,因此可以用下列指令来得到mod_ldap缓冲区的相关信息:

<Location /server/cache-info>
SetHandler ldap-status
</Location>

通过URL http://servername/cache-info,管理员可以得到mod_ldap使用的每个缓冲的状态报告。注意,如果Apache不支持共享内存,那么每个httpd实例都有它自己的缓冲区,因此,每次使用上述URL都可能会得到不同的结果,这取决于具体哪个httpd实例处理了这个请求。

top

使用SSL

通过LDAPTrustedCA 指令和LDAPTrustedCAType 指令可以定义与LDAP服务器建立SSL联接。这两个指令指定了证书文件或数据库以及认证的类型。当LDAP url包含ldaps://时,mod_ldap将会创建到LDAP服务器的安全连接。

# 建立一个SSL LDAP联接。需要模块mod_ldap和mod_auth_ldap的支持。
# 将"yourdomain.example.com"修改为您自己的域名。

LDAPTrustedCA /certs/certfile.der
LDAPTrustedCAType DER_FILE

<Location /ldap-status>
SetHandler ldap-status
Order deny,allow
Deny from all
Allow from yourdomain.example.com
AuthLDAPEnabled on
AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one
AuthLDAPAuthoritative on
require valid-user
</Location>

如果mod_ldap 模块连接了Netscape/iPlanet LDAP SDK,它将不会与任何SSL服务器进行对话,除非那个服务器拥有一个已知的认证机构签发的证书。作为配置的一个部分,mod_ldap需要被告知在什么地方它可以找到包含已知CA的数据库。这个数据库使用Netscape Communicator的cert7.db数据库格式。得到这个文件最简单的方法是启动一份新的Netscape,然后攫取生成的$HOME/.netscape/cert7.db文件。

top

LDAPCacheEntries 指令

说明:主LDAP缓冲的最大条目数
语法:LDAPCacheEntries number
默认值:LDAPCacheEntries 1024
上下文:服务器配置
状态:Experimental
模块:mod_ldap

指定主LDAP缓冲的最大条目数。这个缓冲区包含了成功的search/bind对。把它设为0可以关闭search/bind缓冲。缺省值是1024。

top

LDAPCacheTTL 指令

说明:search/bind缓冲项目有效时限
语法:LDAPCacheTTL seconds
默认值:LDAPCacheTTL 600
上下文:服务器配置
状态:Experimental
模块:mod_ldap

指定search/bind缓冲项目有效的时间,以秒为单位。缺省为600秒(10分钟)。

top

LDAPOpCacheEntries 指令

说明:LDAP compare缓冲区的大小
语法:LDAPOpCacheEntries number
默认值:LDAPOpCacheEntries 1024
上下文:服务器配置
状态:Experimental
模块:mod_ldap

指定mod_ldap使用的LDAP compare缓冲区大小。缺省值是1024条。把它设为0可以关闭操作缓冲。

top

LDAPOpCacheTTL 指令

说明:操作缓冲有效时限
语法:LDAPOpCacheTTL seconds
默认值:LDAPOpCacheTTL 600
上下文:服务器配置
状态:Experimental
模块:mod_ldap

指定操作缓冲项目的有效时长,以秒为单位。缺省为600秒。

top

LDAPSharedCacheSize 指令

说明:以Byte为单位的共享内存缓冲区的大小
语法:LDAPSharedCacheSize bytes
默认值:LDAPSharedCacheSize 102400
上下文:服务器配置
状态:Experimental
模块:mod_ldap

指定共享内存缓冲区的大小,以Byte为单位。缺省为100kb。

top

LDAPTrustedCA 指令

说明:指定包含权威授信机构的证书或数据库
语法:LDAPTrustedCA directory-path/filename
上下文:服务器配置
状态:Experimental
模块:mod_ldap

指定当mod_ldap建立一个到LDAP服务器的SSL连接时,所要用到的被信赖的权威证书的路径与文件名。如果使用Netscape/iPlanet目录SDK,文件名就应该是cert7.db

top

LDAPTrustedCAType 指令

说明:指定权威证书文件的类型
语法:LDAPTrustedCAType type
上下文:服务器配置
状态:Experimental
模块:mod_ldap

以下为所支持的类型:
DER_FILE - 二进制DER格式文件
BASE64_FILE - Base64格式文件
CERT7_DB_PATH - Netscape证书数据库文件

 


项目维护者: kajaa [本文译者: Daniel * ]

项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版