我正在尝试将一个使用 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
上的 HTTPi-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
}
从错误信息来看,问题可能与application.conf
中未设置
play.filters.hosts.allowed有关。该过滤器允许您配置哪些主机可以访问您的应用程序。有关播放过滤器的更多详细信息,请参见此处。
这是一个配置示例:
play.filters.hosts {
allowed = ["."]
}
请注意,
allowed = ["."]
匹配所有主机,因此不建议在生产环境中使用。
如果您的应用程序使用允许的主机过滤器,则必须确保 application.conf 中的 play.filters.hosts.allowed 允许来自任何地方的连接,因为此过滤器否则会导致 ELB 运行状况检查失败。例如:
play.filters.hosts {
allowed = ["."]
}
更多信息请参见官方 Play 文档。
如果您的云基础设施限制了到达您的应用程序的内容(例如:仅允许您的负载均衡器与驻留在私有子网中的容器化 Playframework 应用程序通信),您还可以将您的 application.conf 更新为:
play {
filters {
disabled += play.filters.hosts.AllowedHostsFilter
}
}