Apache HTTP服务器 2.0版本
说明: | 为其它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) 。
下面的配置是一个使用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>
LDAP连接是在请求之间共享的。这就允许LDAP服务器在跳过unbind->connect->rebind这样一个工作周期的情况下,保留连接以减少为下一次请求准备连接的时间。这种性能优化有点象HTTP服务的keepalives功能。
在一个比较繁忙的服务器上,很有可能许多请求同时尝试与同一个LDAP服务进行连接并得到它的服务。如果一个LDAP连接正在使用,Apache会在原来连接的基础上,生成一个新的连接。这将确保连接池不会成为瓶颈。
不需要在Apache配置中,手动开启连接池功能。任何使用本模块来访问LDAP服务的模块会自动共享连接池。
为了改善性能,mod_ldap
模块使用一种积极的缓冲策略以尽量减少与LDAP服务器的联系。通过缓冲,可以方便地使Apache在提供受mod_auth_ldap保护的页面时,得到二倍或三倍的吞吐量。同时,LDAP服务器的负载也会明显地减小。
mod_ldap
支持两种类型的LDAP缓冲。在search/bind阶段,使用一个search/bind缓冲,在compare阶段,使用两个operation缓冲。服务器引用的每个LDAP URL都有它自己的一组如上所述的三个缓冲。
处理一个查询和绑定操作对LDAP实施来讲,是非常耗时,尤其当目录很大时,这一点更加明显。Search/bind缓冲用来缓冲所有的最终能成功绑定的查询。失败的结果(比如:不成功的查询,或查询结果无法成功绑定)不会被缓冲。这样做是因为信任关系失败的连接在所有连接中只占了很小的一个百分比,因此,通过不缓冲这些连接,可以减少缓冲区的大小。
mod_ldap
在缓冲区里储存了用户名,得到的DN,用来绑定的口令,以及绑定的时间。当一个新的连接用同一个用户名来初始化的时候,mod_ldap
将新的连接的口令与保存在缓冲区里的口令进行比较。如果口令匹配,并且那个缓冲项目不是太旧的话,mod_ldap
就跳过search/bind阶段。
查询与绑定缓冲由LDAPCacheEntries
指令和LDAPCacheTTL
指令来控制。
在区分与辨别过程中,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
实例处理了这个请求。
通过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
文件。
说明: | 主LDAP缓冲的最大条目数 |
---|---|
语法: | LDAPCacheEntries number |
默认值: | LDAPCacheEntries 1024 |
上下文: | 服务器配置 |
状态: | Experimental |
模块: | mod_ldap |
指定主LDAP缓冲的最大条目数。这个缓冲区包含了成功的search/bind对。把它设为0可以关闭search/bind缓冲。缺省值是1024。
说明: | search/bind缓冲项目有效时限 |
---|---|
语法: | LDAPCacheTTL seconds |
默认值: | LDAPCacheTTL 600 |
上下文: | 服务器配置 |
状态: | Experimental |
模块: | mod_ldap |
指定search/bind缓冲项目有效的时间,以秒为单位。缺省为600秒(10分钟)。
说明: | LDAP compare缓冲区的大小 |
---|---|
语法: | LDAPOpCacheEntries number |
默认值: | LDAPOpCacheEntries 1024 |
上下文: | 服务器配置 |
状态: | Experimental |
模块: | mod_ldap |
指定mod_ldap
使用的LDAP compare缓冲区大小。缺省值是1024条。把它设为0可以关闭操作缓冲。
说明: | 操作缓冲有效时限 |
---|---|
语法: | LDAPOpCacheTTL seconds |
默认值: | LDAPOpCacheTTL 600 |
上下文: | 服务器配置 |
状态: | Experimental |
模块: | mod_ldap |
指定操作缓冲项目的有效时长,以秒为单位。缺省为600秒。
说明: | 以Byte为单位的共享内存缓冲区的大小 |
---|---|
语法: | LDAPSharedCacheSize bytes |
默认值: | LDAPSharedCacheSize 102400 |
上下文: | 服务器配置 |
状态: | Experimental |
模块: | mod_ldap |
指定共享内存缓冲区的大小,以Byte为单位。缺省为100kb。