一位同事建议我们使用多个主机进行身份验证的网站 基于LDAP,以防一个主机当前关闭。现在我知道你可以做类似
的事情了$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 :(得分:2)
你应该可以这样做:
ldap_connect("ldaps://example.com:389 ldap://example.com:389")
但要注意:这将启动连接(在调用ldap_connect
时不)尝试第一台服务器,超时后 尝试下一台服务器等等。这可能会造成不必要的延迟!
答案 1 :(得分:-1)
如果无法建立连接,则PHPs ldap_connect()将返回false 更多关于ldap_connect()
尝试这样的事情:
if(!$ldap_conn = ldap_connect($adhost1)) {
if(!$ldap_conn = ldap_connect($adhost2)) {
die('Unable to establish LDAP connection.');
}
}