Play Framework - 使用TCP负载平衡时检索客户端的IP

tok*_*rev 13 playframework playframework-2.0

使用案例:Amazon ELB背后的Play应用程序,配置为TCP负载平衡.

Amazon ELB通过代理协议1提供客户端的连接信息.

如何在Play中检索此信息?

Jam*_*per 4

如果您打开了代理协议支持,它会将 haproxy 的专有代理协议标头添加为 TCP 请求中发送的第一个内容。实际上,它在http 请求之前添加了以下行:

PROXY TCP4 192.168.0.1 192.168.0.11 56324 443
Run Code Online (Sandbox Code Playgroud)

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

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

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