request.remoteAddress在scala中提供本地IP

时间:2015-07-17 19:38:36

标签: java scala playframework

我在Heroku上有一个Scala play框架应用程序。我想获得远程主机IP地址,但println(request.remoteAddress)给出10.165.120.180,这似乎是本地IP。

3 个答案:

答案 0 :(得分:2)

Heroku使用代理服务器作为应用程序,这就是你获得本地计算机IP的原因,而你需要阅读名为X-Forwarded-For的公共标题,请参阅 Heroku docs wiki page 了解更多详情。

  

X-Forwarded-For:连接到Heroku路由器的客户端的原始IP地址

答案 1 :(得分:1)

开始播放2.4.x,我们配置trustedProxies代替play doc),然后remoteAddress以及secure标志将正确设置

答案 2 :(得分:0)

您需要将play.http.forwarded.trustedProxies显式设置为可信代理列表。此设置的默认值是环回,即["127.0.0.1", "::1"],这基本上意味着仅信任环回。它肯定不适用于许多情况(大多数情况确实如此)。

如果您不了解(或关心)您的受信任代理人是什么,请将其设置为"信任所有"最有可能是你想要的,像这样:

play.http.forwarded.trustedProxies=["0.0.0.0/0", "::/0"]

documented well in 2.5.x但也适用于2.4.x.如果不使用Play版本2.4.3或之前设置它,可能会很幸运。但是,有a pull request change2.4.4反向移植修改了以前的2.4.x行为的修补程序。{{3}}这可能会给你一个惊喜。