【问题标题】:How do I force users to access my Play application through SSL?如何强制用户通过 SSL 访问我的 Play 应用程序?
【发布时间】:2013-08-26 22:05:32
【问题描述】:

我通过在 SBT 中运行 stage 部署了一个 Play 应用程序,然后使用 target/start 从命令行运行它。我将 Nginx 放在它前面,基于子域,我有两个 server 块——一个用于端口 80,另一个用于端口 443。端口 80 块只是重定向到 https端口 443 上的方案。这一切都很好。

回顾一下:

  • http://play.mydomain.com/ 重定向到
  • https://play.mydomain.com/http://localhost:9000 的代理

但是,如果我只是转到 http://mydomain.com:9000/,我可以直接访问我的 Play 应用程序。没有 SSL,我无法阻止任何人访问它。

我该怎么办?我是否应该使用 Nginx 将端口 9000 上的任何访问重定向到 SSL 版本的 URL?我应该防火墙端口 9000 并且只允许该端口上的本地请求吗? (如果是这样,我该怎么做?)还有其他我没有想到的处理方法吗?

在 Servlet 3.1 规范发布之前需要多长时间,我才能将整个东西部署为 WAR? :-)

【问题讨论】:

  • 好的。刚刚发现我无法让 Nginx 将请求重定向到端口 9000 到正确的子域,因为我的 Play 应用程序已经将自己绑定到端口 9000。奇怪的是我在互联网上找不到任何关于此的内容。我开始认为我错过了一些基本的东西。

标签: ssl nginx playframework-2.0


【解决方案1】:

您可以让您的 Play 应用程序仅在本地接口(例如 127.0.0.1)上侦听。这样,nginx 仍然可以代理对它的请求,但外部没有人可以直接访问您的应用程序。无需额外的防火墙设置。

看起来您可以将附加参数传递给start

$ start -Dhttp.port=9000 -Dhttp.address=127.0.0.1

【讨论】:

  • 而你这样做的方式显然是在启动应用程序时使用选项-Dhttp.address=localhost。如果您使用stage 让应用程序准备好运行,那么您可以使用target/start -Dhttp.address=localhost 并且我已经验证允许通过 Nginx 访问应用程序,但不能直接访问端口 9000。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多