2010-11-17 142 views
0

我有一個服務在Amazon Ec2中運行。該服務公開了一個http端點和一個https端點。我在記錄數據時正在對用戶IP地址進行一些地理位置查找。對於進入http端點的請求,一切正常。我必須抓住X-Forwarded-For標題,這樣我纔不會拿亞馬遜負載平衡器UP地址,我總能得到我所需要的。但是,對於https端點上的請求,所有IP地址都是相同的。如何在SSL請求上獲取請求IP地址

爲了拉IP地址,我使用下面的C#代碼:

public static string FetchClientIp(HttpRequest req) 
    { 
     var value = req.Headers["X-Forwarded-For"]; 
     return string.IsNullOrEmpty(value) ? req.UserHostAddress : value; 
    } 

我無法找到任何東西,我需要做的是針對HTTPS請求,所以我希望有人之前已經遇到過這個問題。我要對此進行測試,以便更好地隔離問題。

感謝

+0

這顯然是亞馬遜流量管理這是問題,它是非常深奧的,所以我不知道你會有多少運氣在這裏。建議您諮詢供應商論壇或支持。 – annakata 2010-11-17 19:17:14

+0

瘋狂的建議:您肯定知道與您連接的端點的IP不是客戶端IP地址嗎? – 2010-11-17 22:17:57

回答

0

這取決於你如何讓您的ELB成立。

如果您在ELB(new feature as of October 2010)上終止SSL,則客戶端IP地址將位於「X-Forwarded-For」中。

HttpContext.Current.Request.Headers["X-Forwarded-For"] 

這聽起來像你在你的web服務器終止SSL,那麼ELB無法解密流量,並添加「X - 轉發,對於」頭到HTTP請求。因此,頭部「REMOTE_ADDR」(即HttpRequest.UserHostAddress返回的頭部)中的客戶端IP地址是最後一跳的IP地址 - 在這種情況下是ELB的內部IP地址。

請記住,「X-Forwared-For」可能包含多個IP地址,如http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?SvcIntro.html#X-Forwarded-For所述。在這種情況下,您可能對列出的第一個地址最感興趣。