<-
Apache > HTTP服务器 > 文档 > V2.0 > 模块

Apache模块 mod_ldap

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

概述

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

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

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

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服务的Keep-Alives功能。

在一个比较繁忙的服务器上,很有可能许多请求同时尝试与同一个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阶段。

查询与绑定缓冲由LDAPCacheEntriesLDAPCacheTTL指令来控制。

Operation缓冲

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

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

缓冲区的监控

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

通过LDAPTrustedCALDAPTrustedCAType指令可以定义与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
作用域server config
状态Experimental
模块mod_ldap

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

top

LDAPCacheTTL 指令

说明search/bind缓冲项目有效时限
语法LDAPCacheTTL seconds
默认值LDAPCacheTTL 600
作用域server config
状态Experimental
模块mod_ldap

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

top

LDAPConnectionTimeout 指令

说明 指定套接字连接超时秒数
语法LDAPConnectionTimeout seconds
作用域server config
状态Experimental
模块mod_ldap

Specifies the timeout value (in seconds) in which the module will attempt to connect to the LDAP server. If a connection is not successful with the timeout period, either an error will be returned or the module will attempt to connect to a secondary LDAP server if one is specified. The default is 10 seconds.

top

LDAPOpCacheEntries 指令

说明LDAP compare缓冲区的大小
语法LDAPOpCacheEntries number
默认值LDAPOpCacheEntries 1024
作用域server config
状态Experimental
模块mod_ldap

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

top

LDAPOpCacheTTL 指令

说明操作缓冲有效时限
语法LDAPOpCacheTTL seconds
默认值LDAPOpCacheTTL 600
作用域server config
状态Experimental
模块mod_ldap

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

top

LDAPSharedCacheFile 指令

说明 设置共享内存缓冲区文件
语法LDAPSharedCacheFile directory-path/filename
作用域server config
状态Experimental
模块mod_ldap

设置共享内存缓冲区文件。若未设置,将使用匿名共享内存(若平台支持)。

top

LDAPSharedCacheSize 指令

说明以Byte为单位的共享内存缓冲区的大小
语法LDAPSharedCacheSize bytes
默认值LDAPSharedCacheSize 102400
作用域server config
状态Experimental
模块mod_ldap

指定共享内存缓冲区的大小,以Byte为单位。默认为100KB。

top

LDAPTrustedCA 指令

说明指定包含权威授信机构的证书或数据库
语法LDAPTrustedCA directory-path/filename
作用域server config
状态Experimental
模块mod_ldap

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

top

LDAPTrustedCAType 指令

说明指定权威证书文件的类型
语法LDAPTrustedCAType type
作用域server config
状态Experimental
模块mod_ldap

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