Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"host not allowed" error when deploying a play framework application to Amazon AWS with Boxfuse

I am trying to deploy a simple web application written using Play Framework in Scala to Amazon web service.

The web application is running OK in development mode and production mode in my local machine, and I've changed its default port to 80.

I used Boxfuse to deploy to AWS as suggested.

I first run "sbt dist" then "boxfuse run -env=prod"

Things went well as desired. The image is fused and pushed to AWS. AMI is created. Instance was started and my application was running.

i-0f696ff22df4a2b71 => 2017-07-13 01:28:23.940 [info] play.api.Play - Application started (Prod)

Then came the error message:

WARNING: Healthcheck (http://35.156.38.90/) returned 400 instead of 200. Retrying for the next 300 seconds ...

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

i-0f696ff22df4a2b71 => 2017-07-13 01:28:25.512 [warn] p.f.h.AllowedHostsFilter - Host not allowed: 35.156.38.90

The instance was terminated after repeated try after 3 minutes. It gave a warning like:

Ensure your application responds with an HTTP 200 at / on port 80

But I've made sure the application responds in local machine, and I tried both Windows and Ubuntu, all works well.

Also, running "boxfuse run" on local machine, I can connect to it using "http://localhost", but still have the error.

Hope someone with experience can give me some suggestions. Thanks in advance.

ps: not sure if relevant, I added these settings to application.conf

http {
        address = 0.0.0.0
        port = 80
    }
like image 290
Haijin Avatar asked Jul 13 '17 01:07

Haijin


2 Answers

Judging from the error message, it looks like the problem might be related to play.filters.hosts.allowed not set up in application.conf. The filter lets you configure which hosts can access your application. More details about the Play filter is available here.

Here's a configuration example:

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

Note that allowed = ["."] matches all hosts hence would not be recommended in a production environment.

like image 176
Leo C Avatar answered Oct 24 '22 03:10

Leo C


As stated in the Boxfuse Play Documentation:

If your application uses the allowed hosts filter you must ensure play.filters.hosts.allowed in application.conf allows connections from anywhere as this filter otherwise causes ELB healthchecks to fail. For example:

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

More info in the official Play documentation.

like image 44
Axel Fontaine Avatar answered Oct 24 '22 02:10

Axel Fontaine