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

ドキュメント: JavaScala

于 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 に答える