[英]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.