Назад | Перейти на главную страницу

Несколько серверов 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" при доступе к репозиторию 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 должен работать и работать нормально)?

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

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

Изменить: уточнение

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

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

TCP занимает пару секунд для обнаружения потерянных сетевых пакетов и повторной передачи. Никогда не устанавливайте таймаут ниже 5 секунд, иначе рабочие соединения могут прерываться.

Во всемирной среде, скажем, веб-сервер находится в азиатском филиале, а LDAP находится в штаб-квартире в Европе, рассмотрите возможность увеличения тайм-аута до 15 секунд.