我在Heroku上部署了一个应用程序,并试图确定传入的请求是否安全(request.secure)。最初,这在heroku上返回false,因为nginx处理SSL工作并通过纯HTTP与应用程序服务器进行通信。因此,为了让 Play 器读取 header ,让我们知道这是一个安全请求,我添加了:
XForwardedSupport = 127.0.0.1
按照play留言板中的建议转到application.conf。但是,所有请求(图像除外)都将失败且没有错误。在到达 Play 记录之前,似乎已经发生了一些根本性的事情。有人经历过吗?
最佳答案
我不认为Play支持通过XForwardedSupport
配置参数在Heroku上转发(代理)请求的方式。需要将其设置为Heroku负载均衡器的地址,并且无法配置该预运行时。相反,您应该只查看x-forwarded-proto
请求 header ,以确定对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的雪松堆栈不使用Nginx。它使用MochiWeb(基于Erlang的Web服务器)。
关于heroku - XForwardedSupport支持https Play !支持Heroku失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512887/