如果将ELB附加到ec2,则运行状况检查在HTTP ping上失败,但在TCP ping上成功

时间:2019-04-03 14:26:51

标签: amazon-web-services nginx amazon-ec2 uwsgi aws-load-balancer

我正在为一个简单的应用程序构建后端。它是与AWS EC2中的nginx-uwsgi-djangorest-api一起使用的。 因为我需要使用https发送请求,所以我在我的ec2实例中添加了elb负载均衡器,该实例将HTTPS转发到HTTP。 ELB必须对模型进行健康检查。最初,我使用“ 80:HTTP / health” ping进行健康检查,并且可以在/ health中看到结果

但是运行状况检查器始终失败,在nginx和uwsgi日志上显示"GET /health/ HTTP/1.1" 400 37 "-" "ELB-HealthChecker/1.0"

ec2实例的安全组

类型-协议-端口范围-源

HTTP-TCP-80-0.0.0.0/0

HTTP-TCP-80-:: / 0

SSH-TCP-22-0.0.0.0/0

负载均衡器的安全组

HTTP-TCP-80-0.0.0.0/0

HTTPS-TCP-443-0.0.0.0/0

nginx的配置文件

upstream django {
    server unix:///tmp/mysocket.sock; # for a file socket
}

server {
    listen 80;
    server_name *.compute.amazonaws.com *.elb.amazonaws.com;
    charset utf-8;
    client_max_body_size 128M;
    location / {
        uwsgi_pass  django;
        include     uwsgi_params;
    }
}

我几个小时都没搞错,当我将运行状况检查ping端口和协议更改为 HTTP:80 / health 更改为 80:TCP 时,突然开始工作...

有人可以向我解释该健康检查程序做什么? 我无法理解80:TCP healthchecker和http healthchecker之间的区别。该用户没有应该访问的/ health /网址。

我也已经获得了SSL认证。

  • 通过http ping,即使将其添加到nginx服务器conf文件中,运行状况检查也会由400响应返回。
location /health {
    return      200;
}

1 个答案:

答案 0 :(得分:0)

TCP健康检查将仅检查是否可以建立TCP连接,而HTTP健康检查将检查响应中的特定HTTP状态代码。您的健康检查网址是否未返回200响应?