2015-10-27 21 views
0

一位同事建议我们使用多个主机用于身份验证
基于LDAP的网站,以防一个主机当前关闭。现在我知道你可以这样做PHP ldap_connect多个主机在一个蜂群无法访问的情况下

$LDAP_SERVERS = "10.101.01.1 10.100.10.2"; 
$ldap = ldap_connect($LDAP_SERVERS); 

但是我使用的是配置文件:

return [ 
    'domain_controller' => ['10.101.01.1', '10.100.10.2'], 
    'base_dn'   => 'OU=foo,DC=example,DC=local', 
    'ssl'    => false, 
    ... 
]; 

而作为同事建议我的连接是通过

$protocol = $this->ssl ? $this::PROTOCOL_SSL : $this::PROTOCOL; 
$port  = $this->ssl ? $this::PORT_SSL : $this::PORT; 

return $this->connection = ldap_connect($protocol . $hostname, $port); 

完成我们的LDAP主机将来可能会通过SSL运行,我怎样才能让这多个主机为此工作?在它上面只与主机名一起工作,但那是因为它不是基于ssl的。鉴于SSL你需要ldaps://协议和端口号,对吧? 因此它不会只用主机工作,我不知道,如果你可以做简单的连接看起来像
ldap_connect('ldaps://' . '10.101.01.1 10.100.10.2', 123);
(假定的两台服务器运行基于SSL的LDAP相同的端口)的东西

编辑:得到它通过使用ldap_connect('ldaps://hostnameone ldaps://hostnametwo, 636');作为reddit的用户的工作说:“通知他们仍然用空格隔开,并应在出场顺序受审..

+0

如果您使用URI,您可以省略端口号,因为它不会被使用 – heiglandreas

回答

2

你应该能够做这样的事情:

ldap_connect("ldaps://example.com:389 ldap://example.com:389") 

但要注意:这将在启动的连接(这是不是在致电ldap_connect)尝试第一台服务器和超时后尝试下一个se rver等等。这可能会导致不必要的延迟!

-1

PHP的ldap_connect()将返回如果假无法建立连接。
更多关于ldap_connect()

尝试是这样的:

if(!$ldap_conn = ldap_connect($adhost1)) { 
    if(!$ldap_conn = ldap_connect($adhost2)) { 
     die('Unable to establish LDAP connection.'); 
    } 
} 
+0

在性能的情况下,这不会很糟吗?假设配置文件有5个主机,并且这是糟糕的一天,其中有4个主机关闭。所以它必须运行一个递归循环来查找正在工作的循环。由于PHP中没有真正的* static *,因此每一个网页都会重复这一步骤。 – Krenor

+0

您可以将连接状态存储在MySql中,并按顺序将其从工作状态拉到不工作状态。如果主机的状态发生变化,则更有可能首先使用工作表并更新表。这样,如果服务器出现故障,它只会缓慢一次。 – Fluinc

+1

''ldap_connect'''如果URI看起来不正确,则返回false!它没有连接(即使它看起来会这样),因此连接问题将在第一个绑定中出现!因此,这将**不**如你所期望的那样工作! – heiglandreas

相关问题