[英]PHP ldap_connect to multiple hosts in case of one beeing not reachable
一位同事建議我們對網站進行身份驗證時使用多個主機
如果一台主機當前關閉,則基於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');
使其正常工作ldap_connect('ldaps://hostnameone ldaps://hostnametwo, 636');
正如reddit用戶所說:“ 請注意,它們仍然由空格隔開,應按出現順序進行嘗試。
您應該能夠執行以下操作:
ldap_connect("ldaps://example.com:389 ldap://example.com:389")
但要注意:這將在啟動連接時( 不是在調用ldap_connect
)嘗試第一個服務器,並在超時后嘗試下一個服務器,依此類推。 這可能會導致不必要的延遲!
如果無法建立連接,PHP ldap_connect()將返回false。
有關ldap_connect()的更多信息
嘗試這樣的事情:
if(!$ldap_conn = ldap_connect($adhost1)) {
if(!$ldap_conn = ldap_connect($adhost2)) {
die('Unable to establish LDAP connection.');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.