How Amazon ELB Health check Works?
Solution 1
I have the same problem. I just have it checking TCP:80 as an interim solution (which works fine).
Solution 2
I've come to the conclusion that the response, apart from being a HTTP 200 response, must contain certain headers. I've had a HTTP 200 returned from my tomcat server running on the instance not work, but a static html page served by httpd (also returning a 200 code) work fine. Looking at the headers, one of the few differences was that the tomcat one didn't contain the content-type. Not sure why that would make a difference, though.
Solution 3
I assume it performs an HTTP GET request to the specified path "/", of each of the servers and looks for a successful HTTP response code (200). Can you successfully make a GET request to http://<backend_server_IP>:80/
via a browser (or CLI tool such as wget
or curl
).
If the request is served successfully, the second thing to ask is: have you configured your servers' security group so that access to port 80 is limited to a particular source address or subnet? If so, you need to add ELB's security group to the filter. The group is always called:
amazon-elb/amazon-elb-sg
So you can just add this under the 'Source' field in the Security Groups section of the AWS Console.
Solution 4
You must be using a specific domain name on your web server. Or you set up your web server to meet any request (binding *) or follow the documentation.
Related videos on Youtube
sharon
Updated on September 18, 2022Comments
-
sharon over 1 year
I am having problems configuring ELB for my servers.
I start 2 micro instances with the exact same conf and try to do Load Balancing. However they never pass the health check (HTTP port 80 path:"/").
- Ping is ok on the website. So is telnet on 80.
How did the health check works? Am I doing anything really wrong?
EDIT:
- Both Direct browser access and GET (via curl) works correctly (status 200)
-
Amar AttilaZz over 12 yearsI have the same problem. I just have it checking TCP:80 as an interim solution (which works fine).
-
sharon over 12 yearsIt worked! Thanks! But I still dont know how the health check works .. :( Can you write an answer so I can check it as accepted?
-
Wonil about 10 yearsAre you using Django? Are you redirect HTTP to HTTPS? I summarized my experience how to solve AWS ELB health check with HTTP to my blog: androidkr.blogspot.kr/2014/03/…
-
Giraffe about 2 yearsThey both don't pass the health check?
-
sharon over 12 yearsThe port 80 is open to the world (0.0.0.0/0). Both direct browser access and curl works correctly (200)
-
sharon over 12 yearsIt was not accessible working with the internal IP. I changed it, its now working, but the health check still not passing.