Eu tenho o Apache 2.2.15 rodando sob o CentOS 6.5. O módulo mod_authnz_ldap
está sendo usado para autenticar em um servidor Microsoft AD. Aqui está a configuração do LDAP no Apache:
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL ldap://[ad server ip address]/[basedn]?mail
AuthLDAPBindDN [binddn]
AuthLDAPBindPassword [bindpass]
AuthName "LDAP: myhost.example.com"
Require ldap-group cn=[foo],ou=Permissions,ou=Groups,ou=[bar],dc=[baz],dc=com
Na maioria das vezes, as solicitações do navegador para esse host do Apache funcionam bem; autentica corretamente contra o servidor do AD e a página é carregada normalmente.
Uma vez a cada poucos minutos, em média, no entanto, a solicitação parecerá travar no lado do navegador. O tcpdump revela que o Apache está enviando um pacote TCP RST, aparentemente em resposta a um pacote PSH ACK do host do AD. A troca é assim:
53 600.408744 Apache AD TCP 74 42804 > ldap [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=2665219285 TSecr=0 WS=128
55 600.469478 AD Apache TCP 66 ldap > 42804 [PSH, ACK] Seq=1 Ack=3457841362 Win=65093 Len=0 TSval=4832637 TSecr=2664621718
56 600.469524 Apache AD TCP 54 42804 > ldap [RST] Seq=3457841362 Win=0 Len=0
65 601.409434 Apache AD TCP 74 [TCP Retransmission] 42804 > ldap [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=2665220285 TSecr=0 WS=128
67 601.470951 AD Apache TCP 78 [TCP Previous segment not captured] ldap > 42804 [SYN, ACK] Seq=252322338 Ack=1 Win=16384 Len=0 MSS=1380 WS=1 TSval=0 TSecr=0 SACK_PERM=1
Nenhum outro pacote é enviado após esse ponto, nessa conexão, e o encadeamento parece estar interrompido. strace não fornece iluminação, apenas mostra uma chamada write () sendo feita com o pedido de ligação LDAP.
Eu também tive uma sessão tcpdump de execução mais longa para capturar um dos processos do Apache tentando enviar uma solicitação LDAP de uma porta TCP que não fazia parte de nenhuma conexão aberta. Parecia que era de uma conexão anterior (semelhante ao tipo mostrado no dump acima) e, de alguma forma, o processo do Apache achava que essa conexão ainda estava aberta.
Achei que talvez um dos caches LDAP estivesse sendo problemático, então os desativei da seguinte forma:
LDAPSharedCacheSize 0
LDAPCacheEntries 0
LDAPOpCacheEntries 0
mas isso não fez diferença; o problema ainda ocorre.
A única maneira de corrigi-lo atualmente é reiniciar o Apache em intervalos de alguns minutos. Com a carga que o servidor recebe, o problema começa a ocorrer dentro de alguns minutos de reinicialização.
Tags ldap apache-2.2