XForwardedSupport用于https播放!对Heroku失败的支持

时间:2011-12-14 22:50:21

标签: heroku playframework mochiweb

我正在Heroku上部署应用程序并尝试确定进入的请求是否安全(request.secure)。这最初在heroku上返回false,因为nginx处理SSL工作并通过普通http与app服务器通信。因此,为了让播放读取让我们知道这是一个安全的请求的标题我添加:

XForwardedSupport = 127.0.0.1

播放留言板中建议的application.conf。但是,所有请求(图像除外)都会失败,没有错误。在点击播放日志之前,这似乎是一些根本性的事情。有没有人经历过这个?

3 个答案:

答案 0 :(得分:6)

我认为Play不支持通过XForwardedSupport配置参数在Heroku上转发(代理)请求的方式。这需要设置为Heroku负载均衡器的地址,并且没有办法配置预运行时。相反,您应该只查看x-forwarded-proto请求标头,以确定对Heorku负载均衡器的请求是通过http还是https。也许是这样的:

    Boolean secure = false;
    if (request.headers.get("x-forwarded-proto") != null) {
      secure = request.headers.get("x-forwarded-proto").values.contains("https");
    }
    System.out.println("secure = " + secure);

BTW:Heroku的雪松堆栈不使用Nginx。它使用MochiWeb,一个基于Erlang的Web服务器。

答案 1 :(得分:3)

thnx大时间!你节省了与heroku +玩挣扎的时间! 我在application.conf中设置它时可以确认

XForwardedSupport=all

heroku停止向SIGTERM投诉

答案 2 :(得分:2)

正如https://play.lighthouseapp.com/projects/57987/tickets/1406-play-123-124-playmvcrouter-does-not-fully-support-proxied-ssl#ticket-1406-4

上的@Dan Carley票所指出的那样

在Heroku上托管时(如M​​irko所指)在application.conf中设置XForwardedSupport=all