用例:Amazon ELB 后面的 Play 应用程序,该应用程序配置为 TCP 负载平衡。

Amazon ELB 通过 Proxy Protocol 1 提供客户端的连接信息。

如何在 Play 中检索此信息?

最佳答案

如果您打开了代理协议(protocol)支持,它会添加 haproxy 的专有代理协议(protocol) header 作为 TCP 请求中发送的第一件事。实际上,它在 http 请求之前添加了以下行:

PROXY TCP4 192.168.0.1 192.168.0.11 56324 443

这不是有效的 HTTP,所以 Play 不支持它,如果 Play 收到这样的请求,它只会返回一个错误。

您可以做的是在您的 EC2 节点上安装一个支持代理协议(protocol)的代理,然后将代理协议(protocol) IP 地址添加到 Play 应用程序的 X-Forwarded-For header 中。可以在此处找到有关如何以这种方式配置 nginx 以支持代理协议(protocol)的说明:

https://chrislea.com/2014/03/20/using-proxy-protocol-nginx/

关于playframework - Play Framework - 使用 TCP 负载均衡时检索客户端的 IP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25977791/

10-16 00:54