17

我正在尝试将使用 Scala 中的 Play Framework 编写的简单 Web 应用程序部署到 Amazon Web 服务。

Web 应用程序在我的本地机器上在开发模式和生产模式下运行良好,我已将其默认端口更改为 80。

我按照建议使用 Boxfuse 部署到 AWS。

我首先运行“ sbt dist ”,然后运行“ boxfuse run -env=prod

事情进展顺利。图像被融合并推送到 AWS。AMI 已创建。实例已启动,我的应用程序正在运行。

i-0f696ff22df4a2b71 => 2017-07-13 01:28:23.940 [info] play.api.Play - 应用程序已启动(产品)

然后出现错误消息:

警告:Healthcheck ( http://35.156.38.90/ ) 返回 400 而不是 200。在接下来的 300 秒内重试...

i-0f696ff22df4a2b71 => 2017-07-13 01:28:24.977 [info] pcsAkkaHttpServer - 在 /0.0.0.0:80 上侦听 HTTP

i-0f696ff22df4a2b71 => 2017-07-13 01:28:25.512 [警告] pfhAllowedHostsFilter - 不允许主机:35.156.38.90

3分钟后重复尝试,实例被终止。它给出了如下警告:

确保您的应用程序在端口 80 上以 HTTP 200 响应

但是我已经确保应用程序在本地机器上响应,并且我尝试了 Windows 和 Ubuntu,一切正常。

另外,在本地机器上运行“boxfuse run”,我可以使用“ http://localhost ”连接到它,但仍然有错误。

希望有经验的人能给我一些建议。提前致谢。

ps:不确定是否相关,我将这些设置添加到 application.conf

http {
        address = 0.0.0.0
        port = 80
    }
4

2 回答 2

34

从错误信息来看,问题可能与play.filters.hosts.allowed not set in相关application.conf。过滤器允许您配置哪些主机可以访问您的应用程序。有关 Play 过滤器的更多详细信息,请参见此处

这是一个配置示例:

play.filters.hosts {
  allowed = ["."]
}

请注意,allowed = ["."]不建议在生产环境中匹配所有主机。

于 2017-07-13T05:57:44.463 回答
23

Boxfuse Play 文档中所述:

如果您的应用程序使用允许的主机过滤器,您必须确保 application.conf 中的 play.filters.hosts.allowed 允许来自任何地方的连接,因为此过滤器会导致 ELB 健康检查失败。例如:

play.filters.hosts {
  allowed = ["."]
}

更多信息在官方 Play 文档中。

于 2017-07-13T07:29:52.393 回答