仅在Heroku上播放HTTPS配置

仅在Heroku上播放HTTPS配置,heroku,https,playframework,Heroku,Https,Playframework,我四处搜索并找到了与此相近的主题(例如和),但我似乎仍然无法使此工作正常,所以继续 我正在使用Play2.6并部署到Heroku。我想强制应用程序只使用HTTPS。正如前面提到的帖子所指出的(使用正确的Heoku设置),它似乎应该可以解决我的问题。但我似乎无法让它工作。基本上,如果我做了下面我建议的简单设置,它不会重定向到https,如果我尝试任何幻想,我会出错 我想我要问的是,如何设置部署到Heroku的Procfile、application.conf和环境变量。仅供参考,我正在使用/我希望

我四处搜索并找到了与此相近的主题(例如和),但我似乎仍然无法使此工作正常,所以继续

我正在使用Play2.6并部署到Heroku。我想强制应用程序只使用HTTPS。正如前面提到的帖子所指出的(使用正确的Heoku设置),它似乎应该可以解决我的问题。但我似乎无法让它工作。基本上,如果我做了下面我建议的简单设置,它不会重定向到https,如果我尝试任何幻想,我会出错

我想我要问的是,如何设置部署到Heroku的Procfile、application.conf和环境变量。仅供参考,我正在使用/我希望能够用于我的非生产部署,以防出现问题

======用于程序文件====

通常,一个简单的Procfile可能如下所示:



    web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}

但是如果没有heroku,我会想做这样的事情(见)

既然Heroku自动设置端口/Https,我该如何合并这两个端口?ie是否有像
${HTTPS\u PORT}
这样的heroku环境变量我应该使用

======对于application.conf====

大概我们想要这样的东西



    play.filters.enabled += play.filters.https.RedirectHttpsFilter
    play.filters.https.redirectEnabled = true

“play.filters.https.redirectEnabled=true”应该不需要,但我把它放在那里以防万一。但我是否还需要指定play.filters.https.port?(见附件)。大概是这样的:



    play.filters.enabled += play.filters.https.RedirectHttpsFilter
    play.filters.https.redirectEnabled = true
    play.filters.https.port=???


提前谢谢

==编辑===

谢谢@codefinger,您给出的答案是正确的。我将把细节放在下面,以备将来参考

如前所述,您需要告诉play检查请求是否已被保护。在这种情况下,它本质上意味着将代理列为白名单。因此,Proc文件可以简单到:



    web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}

但是您需要启用重定向HttpSfilter并配置受信任的代理。请注意,我信任所有IP,但根据您的应用程序,您可以限制这些(详细信息)


我认为您需要启用
play.core.server.common.ForwardedHeaderHandler
,它将检测
X-Forwarded-Proto

TLS终止由Heroku路由器处理,这意味着当所有请求到达您的应用程序时,它们都是纯HTTP。应用程序判断它们是否为HTTP的唯一方法是使用哪个标头



    web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}



    play.filters.enabled += play.filters.https.RedirectHttpsFilter
    play.http.forwarded.trustedProxies=["0.0.0.0/0", "::/0"]