簡體   English   中英

PHP ldap_connect到多個主機,以防一次蜂鳴

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM