Несколько серверов LDAP с mod_authn_alias: отказоустойчивость не работает, когда первый LDAP не работает?

Я пытался настроить резервные серверы LDAP с Apache 2.2.3.

/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 попытается выполнить поиск пользователей во втором LDAP, если первый сервер не работает или OpenLDAP на нем не запущен.

Но на практике этого не происходит. Протестировано остановкой LDAP на главном сервере, я получаю "500 Internal Server Error" при доступе к хранилищу 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 должен работать и работать нормально)?

2 ответа

Решение

Я далек от того, чтобы быть специалистом по LDAP, но в соответствии с документами mod_authnz_ldap вы должны указать отказоустойчивый LDAP-сервер в директиве AuthLDAPUrl следующим образом

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

Изменить: разъяснение

Вы не можете установить разные фильтры для отработки отказа. Отработка отказа должна быть зеркалом основного сервера для обслуживания тех же данных.

То, что сказал Кристофер Перрен, но также по умолчанию время ожидания составляет десять секунд, которое вы можете сократить, чтобы вы "быстро потерпели неудачу", и люди получили ответ быстрее.

Другие вопросы по тегам