Vários servidores LDAP com mod_authn_alias: o failover não funciona quando o primeiro LDAP está inativo?

6

Eu tenho tentado configurar servidores LDAP redundantes com o 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>

Se eu entendi corretamente, mod_authz_ldap tentará pesquisar os usuários no segundo LDAP se o primeiro servidor estiver inativo ou o OpenLDAP não estiver em execução.

Mas na prática, isso não acontece. Testado parando o LDAP no master, recebo o "500 Internal Server Error" ao acessar o repositório do Subversion. O error_log mostra:

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

Eu entendi mal? AuthBasicProvider ldap1 ldap2 significa apenas que, se mod_authz_ldap não conseguir localizar o usuário em ldap1, ele continuará com ldap2. Não inclui o recurso de failover (o ldap1 deve estar em execução e funcionando bem)?

    
por quanta 26.06.2012 / 11:11

2 respostas

6

Estou longe de ser especialista em LDAP, mas de acordo com os documentos mod_authnz_ldap você tem que especificar o servidor LDAP de failover na Diretiva AuthLDAPUrl como esta

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

Editar: esclarecimento

Você não pode definir filtros diferentes para os failovers. Um failover precisa ser um espelho do servidor principal para servir os mesmos dados.

    
por 01.07.2012 / 19:04
2

O que Christopher Perrin disse, mas também o tempo limite padrão é de dez segundos, o que você pode querer encurtar para que você "falhe rápido" e as pessoas recebam uma resposta mais rápida.

    
por 05.07.2012 / 03:48