6

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

XForwardedSupport=127.0.0.1

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

4

3 回答 3

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);

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

于 2011-12-17T14:36:46.347 回答
3

thnx 大时代!您节省了数小时与 heroku+play 的斗争!我可以确认,当您在 application.conf 中进行设置时

XForwardedSupport=all

heroku 不再抱怨 SIGTERM

于 2012-09-06T00:37:28.893 回答
2

正如@Dan Carley 票在https://play.lighthouseapp.com/projects/57987/tickets/1406-play-123-124-playmvcrouter-does-not-fully-support-proxied-ssl#ticket-1406-上指出的那样4

在 Heroku 上托管时,XForwardedSupport=allapplication.conf 中的设置(如 Mirko 所指)有效。

于 2012-06-19T17:44:55.017 回答