4

出于安全原因,有时需要通过 IP 阻止用户。就我而言,我想在(SQL)数据库中管理 IP 黑名单。我想我可以根据动作组合处理过滤器部分,但为此我需要用户的 IP。

那么,如何获取用户的IP呢?

PS:应用程序在 nginx 代理后面运行。

4

2 回答 2

9

如果你玩!app 位于 nginx(或任何其他反向代理)之后,request.remoteAddress()只会返回您的 nginx 主机的 IP 地址。为了检索客户端的真实 IP,您应该在 nginx 的 proxy_pass 配置中包含以下内容:

location / {
  proxy_pass        http://play-app:9000;
  proxy_set_header  X-Real-IP  $remote_addr;
}

这会将客户端 IP 作为参数添加到标头

文档:Nginx

然后在您的游戏中!应用程序,你会像这样检索它:

request.headers.get("X-Real-IP") //In Java
request.headers.get("X-Real-IP") //In Scala

文档:Java , Scala

于 2012-06-27T08:51:51.063 回答
7

现在可以使用 Play 2.0.2+RequestHeader.remoteAddress()

爪哇:

String ip = request().remoteAddress();

斯卡拉:

Action { request =>
    val ip = request.remoteAddress()
}
于 2012-06-26T15:42:31.157 回答