2011-12-14 69 views
6

我在Heroku上部署应用程序并试图确定请求是否安全(request.secure)。这最初在heroku上返回false,因为nginx处理SSL工作并通过普通http与应用程序服务器进行通信。所以,让玩家阅读,让是知道这是一个安全的请求,我添加标题:XForwardedSupport for https play!支持Heroku失败

XForwardedSupport = 127.0.0.1

要application.conf在剧中留言板推荐。但是,那么所有请求(图像除外)都会失败并且没有错误。它在击中播放日志之前似乎是发生了根本性的事情。有没有人经历过这个?

+0

抱怨,我认为这个问题是因为这样的Heroku管理路由。创建一个支持票,他们真的很快回答,我真的很高兴他们解决问题的能力。 – 2011-12-15 10:57:27

+0

会做什么,我会在任何解决方案后回到这里。 – 2011-12-15 12:32:02

回答

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。它使用基于Erlang的Web服务器MochiWeb

3

thnx大的时间!你节省了与heroku +玩的挣扎时间! 我可以确认的是,当你设置这application.conf

XForwardedSupport=all 

Heroku的停止与SIGTERM