具有 mod_authn_alias 的多個 LDAP 伺服器:當第一個 LDAP 關閉時故障轉移不起作用?
我一直在嘗試使用 Apache 2.2.3 設置冗餘 LDAP 伺服器。
/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
如果第一台伺服器已關閉或其上的 OpenLDAP 未執行,將嘗試在第二個 LDAP 中搜尋使用者。但在實踐中,它不會發生。通過在主伺服器上停止 LDAP 進行測試,我在訪問 Subversion 儲存庫時收到*“500 內部伺服器錯誤” 。*節目
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 文件,您必須像這樣在AuthLDAPUrl 指令中指定故障轉移 LDAP 伺服器
AuthLDAPURL "ldap://ldap1.airius.com ldap2.airius.com/ou=People, o=Airius"
編輯:澄清
您不能為故障轉移設置不同的過濾器。故障轉移必須是主伺服器的鏡像才能提供相同的數據。
克里斯托弗·佩林(Christopher Perrin)所說的,但預設超時時間為 10 秒,您可能希望將其縮短為 5 秒,以便您“快速失敗”並且人們可以更快地得到響應。
TCP 需要幾秒鐘來檢測失去的網路數據包並重新傳輸。切勿將超時設置為低於 5 秒,否則可能會不規律地斷開工作連接。
在全球環境中,假設 Web 伺服器位於亞洲分支機構但 LDAP 位於歐洲總部,請考慮將超時時間提高到 15 秒。