我正在为一个简单的应用程序构建后端。它是与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认证。
location /health {
return 200;
}
答案 0 :(得分:0)
TCP健康检查将仅检查是否可以建立TCP连接,而HTTP健康检查将检查响应中的特定HTTP状态代码。您的健康检查网址是否未返回200
响应?