具有 mod_authn_alias 的多个 LDAP 服务器:当第一个 LDAP 关闭时,故障转移不起作用?

具有 mod_authn_alias 的多个 LDAP 服务器:当第一个 LDAP 关闭时,故障转移不起作用?

我一直在尝试使用 Apache 2.2.3 设置冗余 LDAP 服务器。

/etc/httpd/conf.d/authn_alias.conf

<AuthnProviderAlias ldap master>
    AuthLDAPURL ldap://192.168.5.148:389/dc=domain,dc=vn?cn
    AuthLDAPBindDN cn=anonymous,ou=it,dc=domain,dc=vn
    AuthLDAPBindPassword pa$$w0rd
</AuthnProviderAlias>

<AuthnProviderAlias ldap slave>
    AuthLDAPURL ldap://192.168.5.199:389/dc=domain,dc=vn?cn
    AuthLDAPBindDN cn=anonymous,ou=it,dc=domain,dc=vn
    AuthLDAPBindPassword pa$$w0rd
</AuthnProviderAlias>

/etc/httpd/conf.d/authz_ldap.conf

#
# mod_authz_ldap can be used to implement access control and 
# authenticate users against an LDAP database.
# 

LoadModule authz_ldap_module modules/mod_authz_ldap.so

<IfModule mod_authz_ldap.c>
   <Location />
        AuthBasicProvider master slave
        AuthzLDAPAuthoritative Off
        AuthType Basic
        AuthName "Authorization required"

        AuthzLDAPMemberKey member
        AuthUserFile /home/setup/svn/auth-conf
        AuthzLDAPSetGroupAuth user
        require valid-user
        AuthzLDAPLogLevel error
   </Location>
</IfModule>

如果我理解正确的话,mod_authz_ldap如果第一个服务器关闭或其上的 OpenLDAP 没有运行,将尝试在第二个 LDAP 中搜索用户。

但实际上,这种情况不会发生。通过停止主服务器上的 LDAP 进行测试,我得到了“500内部服务器错误”当访问 Subversion 存储库时。error_log显示:

[11061] auth_ldap authenticate: user quanta authentication failed; URI / [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server]

我理解错了吗?AuthBasicProvider ldap1 ldap2仅表示如果mod_authz_ldap在 ldap1 中找不到用户,它将继续使用 ldap2。它不包括故障转移功能(ldap1 必须正在运行且工作正常)?

答案1

我远不能成为 LDAP 专家,但根据mod_authnz_ldap 文档您必须在AuthLDAPUrl 指令像这样

AuthLDAPURL "ldap://ldap1.airius.com ldap2.airius.com/ou=People, o=Airius"

编辑:澄清

您不能为故障转移设置不同的过滤器。故障转移必须是主服务器的镜像,才能提供相同的数据。

答案2

克里斯托弗·佩兰说,默认超时是十秒,您可能希望将其缩短到五秒,以便“快速失败”,人们可以更快地得到答复。

TCP 需要几秒钟来检测丢失的网络数据包并重新传输。切勿将超时时间设置为低于 5 秒,否则可能会不规则地断开工作连接。

在全球环境中,假设 Web 服务器位于亚洲分支机构,但 LDAP 位于欧洲总部,请考虑将超时时间延长至 15 秒。

相关内容