Apache-2.2

具有 mod_authn_alias 的多個 LDAP 伺服器:當第一個 LDAP 關閉時故障轉移不起作用?

  • April 29, 2020

我一直在嘗試使用 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 秒。

引用自:https://serverfault.com/questions/402260