[英]What's the relation between load balancer and HTTP_X_FORWARDED_FOR?
這是我對用戶IP的理解:
用戶的IP是REMOTE_ADDR
。 但是,如果用戶使用的是代理服務器(例如HotSpotSheild(HSS))或代理鏈,則REMOTE_ADDR
是代理服務器的地址(不是用戶的IP) ,並且用戶的IP可能在其他標頭中,如下所示:
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
因此,當用戶使用代理時,便無法檢測到他。
問題1:這些標頭之一(上面)始終是滿的嗎? 剩下的是空的嗎?
Question2:將REMOTE_ADDR
和其中一個標頭(不為空)存儲在數據庫的不同字段中是一個好主意嗎? (我的意思是,IP有兩列,而不僅僅是一列)
這是我對負載均衡器的理解:
它是運行服務器集群時使用的反向代理服務器。 客戶端連接到負載平衡器,然后它將連接轉發到實際服務器之一。
理論:
如果使用負載均衡器,請使用
HTTP_X_FORWARDED_FOR
作為用戶的IP。
Question3如果有負載平衡器,為什么我應該將bHTTP_X_FORWARDED_FOR
存儲為用戶的IP? 我的意思是說bHTTP_X_FORWARDED_FOR
與負載均衡器有什么關系?
這全部與信任的概念和特定的實現細節有關。
如果您的系統信任代理服務器(例如在反向代理情況下),那么您可以信任那些HTTP標頭之一中傳遞給您的IP。
如果沒有理由信任代理服務器(例如,諸如Hotspot Shield之類的隨機Internet代理),則您的系統不知道傳遞給您的IP是否是簡單的。
您可能有一個基於REMOTE_ADDR
信任的服務器白名單,並且如果您從其中一個服務器獲得連接,則可以使用HTTP標頭中的IP代替(盡管出於完整性考慮,最好同時記錄兩者)。 您可能還希望擴展它,以便某些遠程代理信任某些標頭,否則可能存在安全漏洞,即用戶提供自己的標頭並設法毫發無損地通過代理。
這些標頭之一(上面)總是滿的嗎? 剩下的是空的嗎?
取決於代理及其軟件實現。
將REMOTE_ADDR和其中一個標頭(不為空)存儲在數據庫的不同字段中是一個好主意嗎? (我的意思是,IP有兩列,而不僅僅是一列)
是的,兩者都存儲沒有害處-它們對於任何審計跟蹤都可能有用。
有負載均衡器時,為什么應將bHTTP_X_FORWARDED_FOR存儲為用戶的IP? 我的意思是說bHTTP_X_FORWARDED_FOR與負載均衡器有什么關系?
由於您的負載均衡器應該是受信任的代理,因此您應該能夠信任它提供給您的IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.