我正在Heroku上部署一个应用程序,并试图确定进入的请求是否安全(request.secure)。这在heroku上最初返回false,因为nginx处理SSL工作并通过纯http与应用服务器通信。所以要让play读取报头让它知道这是一个安全请求我添加:
XForwardedSupport = 127.0.0.1
到play留言板中推荐的application.conf。但是,所有请求(除了图像)都失败,没有错误。这似乎是在游戏进入游戏记录之前发生的一些基本事情。有人经历过吗?
我不认为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);
顺便说一句:Heroku的cedar stack不使用Nginx。它使用MochiWeb,一个基于erlang的web服务器。
非常感谢!你节省了几个小时的挣扎与英雄+玩!我可以确认,当你在application.conf
中设置它时XForwardedSupport=all
heroku停止抱怨SIGTERM
正如@Dan Carley ticket在https://play.lighthouseapp.com/projects/57987/tickets/1406-play-123-124-playmvcrouter-does-not-fully-support-proxied-ssl#ticket-1406-4上指出的那样
当托管在Heroku上时,(正如Mirko所指出的)在application.conf中设置XForwardedSupport=all
。