我在Heroku上有一个Scala play框架应用程序。我想获得远程主机IP地址,但println(request.remoteAddress)给出10.165.120.180,这似乎是本地IP。
答案 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 change向2.4.4
反向移植修改了以前的2.4.x行为的修补程序。{{3}}这可能会给你一个惊喜。