Depois de aumentar o nível de log dos módulos authnz_ldap
e ldap
, a seguinte mensagem de erro apareceu no log de erros:
ldap_simple_bind() timed out on reused connection, dropped by firewall?
Isso me levou ao relatório de bugs do mod_ldap , que, embora tenha sido um erro de configuração, apontou-me para o problema real:
As reported elsewhere, windows closes an LDAP connection after 900 seconds, but the default Apache behavior appears to try to re-use the connection indefinitely. If Apache tries to re-use after windows has closed the connection, there's a 60 second delay waiting for the connection to timeout [...]
Fazendo algumas verificações rápidas para confirmar isso:
O valor padrão de MaxConnIdleTime
nas Políticas LDAP da Microsoft é de 900 segundos, o que coincide com minha observação de que o problema aparece novamente após 15 minutos. O atraso de 60 segundos também corresponde exatamente ao meu problema.
De acordo com esse relatório de erros, o problema deve ser resolvido definindo LDAPConnectionPoolTTL
para um valor menor que MaxConnIdleTime
e diferente do valor padrão -1, mas isso não funcionou para mim. Eu tive que definir o valor para 0
, desabilitando a reutilização de conexões existentes.
LDAPConnectionPoolTTL 0
Eu não espero nenhum problema de desempenho com isso, já que os resultados do ldap são armazenados em cache de qualquer maneira.
A única coisa que permanece um mistério é por que esse problema ocorre apenas em nossa instância do Apache em execução no Windows, mas não com as instâncias do Apache em execução no Linux.