10

我們目前正在使用Lighttpd和FastCGI爲我們的客戶提供PHP服務。我們最近通過RackSpace Cloud添加了負載均衡功能,以幫助我們處理流量,但客戶端的IP現在是負載平衡器IP。所有流量都是通過HTTPS。通過https與Rackspace Cloud負載均衡器的客戶端IP問題地址

我們啓用了mod_extforward並嘗試了使用我們的LB IP和不同的頭文件(「X-Forwarded-For」,「Forwarded-For」,「X-Cluster-Client-Ip」)的所有不同配置。我們似乎無法得到這個工作!

任何想法?謝謝!

+2

因此,您的問題是「RackSpace Cloud在哪個頭部發送客戶端IP?」應該是「X-Forwarded-For」,但爲什麼不簡單地轉儲標題並尋找自己。 – AndreKR

+0

我不確定如何做到這一點。有什麼幫助嗎? – Kaiser

+1

你已經嘗試過查看'phpinfo()'輸出的IP地址嗎?在PHP 5.4下,可以使用'getallheaders()',對於早期版本,最簡單的方法可能是使用'tcpdump -s 2000 -w dump',然後將這個轉儲扔到Wireshark中。 – AndreKR

回答

7

如果您使用Rackspace的雲負載均衡器,您將無法通過SSL獲取客戶端的IP地址。

對於普通的HTTP,平衡器可以做智能事物(「服務不可用」頁面,X-Forwarded-for等)。但是,負載均衡器除了客戶端和服務器之間的渡口字節通過HTTPS,因爲沒有私鑰,沒有辦法修改流(除非使其無效)。

某人asked this question在Rackspace論壇上不久前。

+1

這是否有任何更新? – ecorvo

0

Rackspace添加了SSL終止,因此您可以讓負載均衡器解密流量並將未加密的流量傳遞到其服務器節點。有關更多信息,請參閱this。當然,這意味着您要通過負載均衡器到Web服務器的有效公共鏈接發送流量。而且,它的唯一可用通過他們的API而不是Web控制檯,這吸引。

1

據Rackspace公司,SSL終止不應該,如果你的web應用所使用正在傳送個人身份信息(PII)

http://www.rackspace.com/knowledge_center/product-faq/cloud-load-balancers

我不得不求助於在cookie中設置客戶端的IP。該cookie設置爲JavaScript。客戶端的IP是通過向服務器(而不是負載均衡器後面)發起jsonp調用獲得的,該服務器提供客戶端的公有IP。這就是我所能想到的,我仍然可以利用Rackspace的雲負載平衡器。

+0

這不是一個合法的免責聲明,但建議如果未加密的流量只經過Rackspace的內部網絡,它是非常安全的。根據Rackspace的說法;「」「Aaron M(26/01/2017,14:20:29):您不必擔心流量,接口配置爲不允許從管理程序級別進行數據包嗅探/捕獲,因此它將無法從另一臺服務器捕獲「」「 – MagicLAMP

0

我在負載均衡器和Rackspace下爲服務器安裝mod_rpaf。然後任何PHP代碼就像以前一樣REMOTE_ADDR

+0

鏈接?示例配置?爲什麼/如何解決問題? – Synchro

+0

可以在Apache 2.2中輕鬆配置'mod_rpaf',以基於'X的值重寫'REMOTE_ADDR' -Forwarded-For「或另一個HTTP頭,這將導致標準日誌以及PHP等解釋器通過客戶端的IP而不是負載均衡器的IP來接收更正後的'REMOTE_ADDR' 在Apache 2.4中,標準的'mod_remoteip'模塊執行類似的工作。 – gid

0

我發現解決這個問題的一種方法是使用CloudFlare。除了它提供的所有附加功能和優點之外,它實際上是一個代理本身,並將包含它自己的x-forwarded-for標頭。

這會繞過問題,因爲x-forwarded-for標頭在到達機架空間負載平衡器之前已經存在,所以它不需要添加任何東西。客戶端IP地址將已經在標題中。

請注意:即使使用可信代理列表,這種方法並不完全萬無一失。可以通過修改計算機的主機文件並繞過cloudflare來欺騙IP地址,直接連接到負載平衡器。我不會將這種技術用於需要高度安全性的任何事情。