【问题标题】:with ELB attached to ec2, health check failed on HTTP ping, but succeeded with TCP ping将 ELB 连接到 ec2,健康检查在 HTTP ping 上失败,但在 TCP ping 上成功
【发布时间】:2019-04-03 23:48:32
【问题描述】:

我正在为一个简单的应用程序构建后端。它与 AWS EC2 中的 nginx-uwsgi-djangorest-api 一起使用。 因为我需要使用 https 发送请求,所以我将 elb 负载均衡器添加到我的 ec2 实例中,该实例将 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/ url。

我也已经获得了 SSL 认证。

  • 通过http ping,即使我将它添加到nginx服务器的conf文件中,健康检查也是由400响应返回的。
location /health {
    return      200;
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 如果返回的是400响应,那就是错误码,会导致健康检查失败...
    • 是的,我知道...但是除了将 ping 协议和端口更改为 80:TCP 之外无法修复它
    猜你喜欢
    • 2020-12-18
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2020-10-29
    • 2019-12-22
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多