根据说明,我配置了多个 LDAP 源以实现冗余。但我发现配置存在一些问题。
如果 ldap 服务没有在指定的 ldap 服务器上运行,而是转到列表中的下一个服务器,则工作不会通过列表中的其他条目进行,而是会挂起。
如果 ldap 服务器关闭并且无法工作,它会抛出 5xx 内部服务器错误,并且不会继续处理列表中的其他条目。
这些是 Apache 错误吗?或者我应该包含更多指令来正确配置冗余?
有问题的 http.conf 部分:
<AuthnProviderAlias ldap ldap1>
AuthBasicProvider ldap
AuthLDAPURL "ldap://ldap1.server.com:389/dc=server,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=matcher,OU=Application Accounts,dc=server,dc=com"
AuthLDAPBindPassword "SECRET"
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap2>
AuthBasicProvider ldap
AuthLDAPURL "ldap://ldap2.server.com:389/dc=server,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=matcher,OU=Application Accounts,dc=server,dc=com"
AuthLDAPBindPassword "SECRET"
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap3>
AuthBasicProvider ldap
AuthLDAPURL "ldap://ldap3.server.com:389/dc=server,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=matcher,OU=Application Accounts,dc=server,dc=com"
AuthLDAPBindPassword "SECRET"
</AuthnProviderAlias>
<AuthnProviderAlias file file1>
AuthUserFile /etc/mdpctest/htpasswd.users
</AuthnProviderAlias>
<Directory /srv/www/htdocs/mdptest>
Order deny,allow
Deny from All
AuthName "Request Access"
AuthType Basic
AuthBasicProvider file1 ldap1 ldap2 ldap3
AuthzLDAPAuthoritative on
require valid-user
Satisfy any
</Directory>
Apache 版本信息如下:
Server version: Apache/2.2.12 (Linux/SUSE)
Server built: Nov 30 2011 17:54:13
Server's Module Magic Number: 20051115:23
Server loaded: APR 1.3.3, APR-Util 1.3.4
Compiled using: APR 1.3.3, APR-Util 1.3.4
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/srv/www"
-D SUEXEC_BIN="/usr/sbin/suexec2"
-D DEFAULT_PIDLOG="/var/run/httpd2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/accept.lock"
-D DEFAULT_ERRORLOG="/var/log/apache2/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/httpd.conf"
答案1
嗯,这对我有用:
AuthLDAPURL ldap://ldap.company.com:389,ldapbackup.company.com:1389/ou=Users,dc=company,dc=com?uid
我不需要任何引号,而且用空格分隔服务器也不起作用。(Apache/2.2.14)
答案2
答案是在 LDAP 配置记录中指定多个源。
请注意 AuthLDAPURL 中主机规范之间的空格以及指令括在引号中的事实:
有问题的 http.conf 部分:
<AuthnProviderAlias ldap ldap1>
AuthBasicProvider ldap
AuthLDAPURL "ldap://ldap1.server.com:389 ldap2.server.com:389 ldap3.server.com:389/dc=server,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "CN=matcher,OU=Application Accounts,dc=server,dc=com"
AuthLDAPBindPassword "SECRET"
</AuthnProviderAlias>
<AuthnProviderAlias file file1>
AuthUserFile /etc/mdpctest/htpasswd.users
</AuthnProviderAlias>
<Directory /srv/www/htdocs/mdptest>
Order deny,allow
Deny from All
AuthName "Request Access"
AuthType Basic
AuthBasicProvider file1 ldap1
AuthzLDAPAuthoritative on
require valid-user
Satisfy any
</Directory>