使用 Boxfuse 将 Play 框架应用程序部署到 Amazon AWS 时出现“主机不允许”错误

问题描述 投票:0回答:3

我正在尝试将一个使用 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 - 应用程序已启动(产品)

然后出现错误消息:

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

i-0f696ff22df4a2b71 => 2017-07-13 01:28:24.977 [info] p.c.s.AkkaHttpServer - 监听 /0.0.0.0:80

上的 HTTP

i-0f696ff22df4a2b71 => 2017-07-13 01:28:25.512 [警告] p.f.h.AllowedHostsFilter - 不允许主机: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
    }
scala amazon-web-services playframework cloudcaptain
3个回答
37
投票

从错误信息来看,问题可能与application.conf中未设置

play.filters.hosts.allowed
有关。该过滤器允许您配置哪些主机可以访问您的应用程序。有关播放过滤器的更多详细信息,请参见此处

这是一个配置示例:

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

请注意,

allowed = ["."]
匹配所有主机,因此不建议在生产环境中使用。


24
投票

Boxfuse Play文档中所述

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

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

更多信息请参见官方 Play 文档


0
投票

如果您的云基础设施限制了到达您的应用程序的内容(例如:仅允许您的负载均衡器与驻留在私有子网中的容器化 Playframework 应用程序通信),您还可以将您的 application.conf 更新为:

play {
  filters {
    disabled += play.filters.hosts.AllowedHostsFilter
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.