LoginSignup
1
0

More than 5 years have passed since last update.

PlayFramework(2.5.14)でIPアドレスを取得する時にハマった

Last updated at Posted at 2017-10-09

現象

アクセスしてきているクライアントのIPアドレスを取得する必要があり、play.api.mvc.RequestremoteAddress()で期待していた結果を取得できなかった。
インフラの構成によると思いますが、自分の場合、Webサーバーとして立てていたNginxのIPアドレスが取得されました。

HomeController.scala
def index = Action { request =>
  // NginxのIPアドレスが取得された
  val clientIp = request.remoteAddress
  Ok("clientIp[" + clientIp + "]")
}

原因

調べるとどうやらremoteAddress()はHTTPヘッダのX-Forwarded-Forを返すと分かりました。
この時、X-Forwarded-Forであればclient1, proxy1(Nginx)といった形で取得できるのではと思いましたが、
Nginxの設定を見返すとX-Forwarded-Forの設定が抜けていました・・・

クライアントのIPアドレスだけ取得する

取得したかったのはクライアントのIPアドレスだけだったので、以下の実装に修正しました。

HomeController.scala
def index = Action { request =>
  val xForwardedFor = request.headers.get("X-Forwarded-For").getOrElse("")
  val clientIp = xForwardedFor.split(",").headOption.getOrElse("")

  Ok("clientIp[" + clientIp + "]")
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0