纸上得来终觉浅,绝知此事要躬行。
1. mod_dbd
模块
mod_dbd
模块并不是一个数据库连接和管理的模块,只是为了需要数据库连接的模块提供一个与其他数据库连接的支持的功能,并且负责管理数据库而已。
在最早的时候,Apache
是不支持数据库连接的,但后来因为需求越来越多,导致开发出连接数据库的API
,即mod_dbd
模块。这样任何程序都可以通过API
直接对数据库进行访问,而不需担心身份认证、如何连接等问题了。
模块优点
- (1) 在线程化
MPM
上,提供了更具伸缩性和更多有效的连接池,如worker
- (2) 在非线程的
MPM
上,可以提供持久连接,如profork
- (3) 独立于数据库系统,可以通过不同的数据库驱动模块实现对各种数据库的支持
- (4)
HTML
和XML
页面可以直接访问数据库 - (5) 无须再次进行身份认证
虽然mod_dbd
模块可以用于连接和管理数据库支持,但是需要其他数据库驱动模块进行配合才能正常工作,而在数据库驱动方面,apr
工具程序提供了很好的帮助,用户可以通过使用apr-util
工具来建立底层的数据库驱动模块,其支持多种数据库类型。
两者关系
httpd
程序通过mod_dbd
模块访问apr_dbd
的数据库支持模块来实现对数据库的SQL
操作- 整个过程对于其他程序来说是透明的,从而节省了开发底层数据库驱动的时间
apr_dbd
模块并不会在你编译安装时默认安装,而是需要手动安装它,包含在Apache
的源代码中
安装 apr_dbd 模块
# (1) 如果没有编译好的apr程序,需要如下操作
# 完成之后,便可以在编译apr-util模块的时候通过--with-apr参数来指定apr工具的位置
cd httpd-2.2.21/srclib/apr/
./configure --prefix=/usr
make
# (2) 确保安装了完整的数据库程序
# 不同的操作系统有可能需要额外的依赖关系
cd httpd-2.2.21/srclib/apr-util/ && ./buildconf
# 当buildconf脚本执行完毕后会在当前目录的include子目录中生成一个apu.h文件,通过修改这个文件可以启用apu对其他数据库的连接支持。在文件的最后部分,选择需要支持的数据库,去掉注释并修改0为1。
define APU_HAVE_MYSQL 1
# 之后就可以编译安装apr-util了,需要配置指定的安装路径和数据库指定支持的路径
./configure --prefix=/usr --with-mysql=/usr --with-pgsql=/usr
make && make install
# 安装完成之后,就可以在安装目录下的lib/apr-util-1/目录下查找到以下文件
apr_dbd_mysql.so apr_dbd_pgsql.so
配置数据库连接
- 当准备工作完成之后就可以在
httpd.conf
文件中配置mod_dbd
模块DBDriver
指令:设置apr_dbd
驱动程序DBDParams
指令:设置数据库连接参数DBDMin
指令:设置每个进程的最小连接数,仅用于线程化模型DBDMax
指令:设置每个进程的最大连接数,仅用于线程化模型DBDKeep
指令:设置每个进程的连接数,仅用于线程化模型DBDExptime
指令:指定DBDKeep
指令所设置的每个进程连接允许的持续时间,仅用于线程化模型
2. mod_ldap 模块
mod_ldap
模块实在Apache2.0.41
之后加入官方模块中的,可以提供标准的LDAP
功能和使用共享内存提供LDAP
的连接池服务。由于LDAP
的连接是在请求之间共享的,所有LDAP
通过连接池连接可以省去unbind
、connect
、rebind
的操作,提高了性能。
对于一个LDAP
服务器来说,虽然专门针对读取进行了优化,但是当LDAP
目录非常大时,查询和绑定操作很消耗资源和时间,而mod_ldap
模块采用了缓冲策略尽量减少与LDAP
服务器的联系,使负载明显减少。在mod_ldap
模块处理的每一个URL
请求中,mod_ldap
模块都会为它们使用缓存功能,mod_ldap
模块支持两种方式的缓存类型。
- (1) 在
search/bind
阶段使用缓冲- 缓冲区中存放查询、用户名、
DN
、口令等内容 - 当用户请求连接时,先在缓冲区中查找,如果匹配且未失效,将会跳过
search/bind
阶段进行连接
- 缓冲区中存放查询、用户名、
- (2) 在
compare
阶段使用缓冲- 使用两个操作缓冲区来进行缓冲比较
- 第一个缓冲区用来缓冲是否
LDAP
组成员的测试结果 - 第二个缓冲区用来缓冲不同名字间鉴别的比较结果
启用LDAP
模块时需要将LDAP
支持加入到APU
中,即apr
工具里。可以通过在configure
脚本中添加--with-ldap
参数对LDAP
进行支持。如果还需要LDAP
支持SSL
或TLS
,还需要为apr
加上如下任何一种SDK
支持。
OpenLDAP SDK
Novell LDAP SDK
Mozilla LDAP SDK
Solaris LDAP SDK
Microsoft LDAP SDK
iPlanet SDK
# 模块添加方式
./configure
--with-ldap-inculde=/usr/include \
--with-ldap-lib=/usr/lib--with-ldap=/usr/lib \
--enable-ssl \
--with-sslc=/usr \
--with-ssl=/usr \
--with-sslport=443