Amazon web services 当ELB连接到ec2时,HTTP ping上的运行状况检查失败,但TCP ping成功

Amazon web services 当ELB连接到ec2时,HTTP ping上的运行状况检查失败,但TCP ping成功,amazon-web-services,nginx,amazon-ec2,uwsgi,aws-load-balancer,Amazon Web Services,Nginx,Amazon Ec2,Uwsgi,Aws Load Balancer,我正在为一个简单的应用程序构建后端。它与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“-“E

我正在为一个简单的应用程序构建后端。它与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

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/health80:TCP时,它突然开始工作

有人能给我解释一下那个健康检查员是干什么的吗? 我无法理解80:TCP healthchecker和http healthchecker之间的区别。这个没有应该到达的/health/url

我也已经有了SSL认证

  • 通过http ping,即使我将其添加到nginx服务器conf文件中,healthcheck也会由400响应返回

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

如果它返回
400
响应,这是一个错误代码,将导致健康检查失败…是的,我知道。。。但是除了将ping协议和端口更改为80:TCP之外,无法修复它
location /health {
    return      200;
}