【发布时间】:2018-08-26 11:47:20
【问题描述】:
我四处搜索并找到了与此相关的主题(例如 here 和 here),但我似乎仍然无法使其正常工作,所以就这样吧。
我正在使用 play 2.6 并部署到 Heroku。我想强制应用只使用 HTTPS。正如前面提到的帖子所指出的那样,this filter(使用适当的 Heoku 设置)似乎应该可以解决我的问题。但我似乎无法让它工作。基本上,如果我进行下面我建议的简单设置,它不会重定向到 https,如果我尝试任何花哨的东西,我就会出错。
我想我要问的是如何设置 Procfile、application.conf 和环境变量以部署到 Heroku。作为一个仅供参考,我正在使用/我希望能够将play's self signed certificates 用于我的非生产部署,以防出现问题。
===== 对于 Procfile ====
通常一个简单的 Procfile 可能如下所示:
web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}
但是如果没有heroku,我想做这样的事情(见here)
play -Dhttp.port=disabled -Dhttps.port=443
既然 Heroku 自动设置了端口/Https,我该如何合并这两者?即我应该使用像${HTTPS_PORT} 这样的heroku env var吗?
===== 对于application.conf ====
大概我们想要这样的东西
play.filters.enabled += play.filters.https.RedirectHttpsFilter
play.filters.https.redirectEnabled = true
"play.filters.https.redirectEnabled = true" 不需要,但我把它放在那里以防万一。但是我还需要指定 play.filters.https.port 吗? (见here)。像这样的:
play.filters.enabled += play.filters.https.RedirectHttpsFilter
play.filters.https.redirectEnabled = true
play.filters.https.port=???
提前致谢。
==== 编辑 ===
感谢@codefinger,您给出的答案是正确的。我将把详细信息放在下面以供将来参考。
如here 所述,您需要告诉 play 以检查请求是否已得到保护。在这种情况下,它本质上意味着将代理列入白名单。所以 Proc 文件可以很简单:
web: target/universal/stage/bin/my-app -Dhttp.port=${PORT}
但您需要启用 RedirectHttpsFilter 并配置受信任的代理。请注意,我信任所有 IP,但您可以根据您的应用对其进行限制(详情 here)。
play.filters.enabled += play.filters.https.RedirectHttpsFilter
play.http.forwarded.trustedProxies=["0.0.0.0/0", "::/0"]
【问题讨论】:
标签: heroku https playframework