2015-10-27 55 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

相關問題