nginx - 如何在 Play Framework 2 中获取用户的 IP?

标签 nginx playframework-2.0

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

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

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

最佳答案

如果你玩!应用程序位于 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 作为参数添加到 header 中

文档:Nginx

然后在您的 Play 中!应用程序,你会像这样检索它:
request.headers.get("X-Real-IP") //In Java
request.headers.get("X-Real-IP") //In Scala

文档:Java , Scala

关于nginx - 如何在 Play Framework 2 中获取用户的 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207654/

相关文章:

playframework-2.0 - 为什么 "sbt run"失败并出现 OutOfMemoryError 而 "activator run"工作正常?

java - 如何在 Play Framework 2 中从外部向 Actor 发送消息?

Java 玩吧!启动问题

javascript - 是否可以在不运行服务器的情况下像使用 PHP 文件一样使用 Node.js?

django - uwsgi_pass 不转发 SCRIPT_NAME header

google-app-engine - Appengine - 使用 https 的本地开发服务器

java - 如何在 Controller java play中调用路由?

playframework - 如何更改 Play 在执行 “debug run” 命令时使用的默认端口 (9000)?

node.js - 如何设置端点来处理nginx后面的express中的websockets

php - Nginx 的 fastcgi-php.conf 片段丢失