繁体   English   中英

负载均衡器和HTTP_X_FORWARDED_FOR之间有什么关系?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM