我正在aws
云上开发聊天后端应用程序。为了建立聊天后端的可扩展架构,我必须确保打开连接的人是真实的。
更准确的说,聊天时必须始终与服务器保持tcp
连接,并且我遇到以下问题:
1 - 后端有一个负载均衡器elastic load balancer
。
2 - 客户端应用程序与后端服务器之间的tcp
连接必须保持打开和活动状态。这意味着应用必须使服务器与elb
负载均衡器保持连接。
3 - elb
负载均衡器必须发送连接并通过会话表sticky session
加载到之前连接到的应用程序的同一服务器。
遗憾的是,负载均衡器仅支持l4
和l7
层,我认为我需要使用l3
图层。
这里的主要问题是大多数人在代理服务器后面操作,因此我无法与他们保持联系,因为tcp
连接将使用代理而不是他们的应用程序。
我不知道如何解决这个问题,但我现在知道的唯一解决方案是: 我必须阻止用户在任何代理服务器后面运行,以确保tcp连接是直接与他们而不是代理,我该怎么做?
如果有办法让他们在代理服务器后面运行,可以在后端告诉我。
答案 0 :(得分:2)
我不确定我理解你的担忧。如果您使用的是Web套接字,大多数代理都会允许这种类型的通信,但如果它们有超时等,它们也会给您带来麻烦。
您无法控制某人是否在代理人后面。在许多情况下,代理将完全透明,因此如果不检查所有网络跃点,您将无法知道它是否存在。您可能想要进一步阅读此内容。这篇文章是一个好的开始 -
https://www.infoq.com/articles/Web-Sockets-Proxy-Servers
如果您尝试使用IP地址作为身份验证机制,我建议使用标准身份验证机制。经过身份验证后,您应该使用会话cookie,JWT或其他标准会话管理解决方案来管理会话。请注意,JWT通常是无状态的(不使用会话),但可用于授权用户使用会话类型数据。