2016-04-03 106 views
2

我已經切換到使用Amazon AWS Elastic Load Balancer,現在我得到一個用於$_SERVER['REMOTE_ADDR']的私有IP地址 - 用於給我客戶端的IP地址。

現在如何獲取客戶端IP地址?

+2

如果負載平衡器沒有設置客戶端IP地址的標頭,那麼您將無法獲得客戶端的IP地址。你可以看看'$ _SERVER'超全局,看看是否有這樣一個頭(例如叫做'HTTP_X_FORWARDED_FOR')。 –

+1

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html –

+0

Apache,nginx或其他?每種方法都可以獲取X-Forwarded-For地址並使用它。 – ceejayoz

回答

4

您的網絡服務器接收來自Amazon ELB的HTTP請求。因此,遠程地址將始終是ELB的一個IP地址。 如果您需要ELB後面的遠程主機地址,請從HTTP頭「X-Forwarded-For」中獲取。

+0

X-Forwarded-For正在返回:「192.155.96.40,54.240.144.13」 - 任何想法爲什麼它返回兩個地址,它們是什麼? –

+0

是的,你可能需要第一個地址。 ELB可以返回多個地址,如http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html: 中所述,如果請求經過多個代理,則clientIPAddress在X-Forwarded-For請求頭中,後面跟着請求在到達負載均衡器之前經過的每個連續代理的IP地址。因此,最右側的IP地址是最近代理的IP地址,最左側的IP地址是始發客戶端的IP地址。 –

+0

嗯,但我認爲我只會相信最右邊的一個。我真的不信任客戶端的任何東西...... –