You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS应用负载均衡器(ALB)健康检查超时问题求助

排查AWS ALB+ASG部署Django站点健康检查超时的方向

1. 校验ALB健康检查核心配置

  • 路径与状态码匹配:ALB默认用/做健康检查,但如果你的Django站点根路径有重定向(比如跳转到HTTPS或后台),会返回非200状态码。建议新增专门的健康检查端点:
    # 在任意Django app的views.py中添加
    from django.http import HttpResponse
    
    def health_check(request):
        return HttpResponse("OK", status=200)
    
    并在项目urls.py中注册路由:
    path('health/', views.health_check, name='health_check'),
    
    之后将ALB目标组的健康检查路径改为/health/,端口指定为80(对应Nginx监听端口)。
  • 协议与端口一致性:确认ALB健康检查的协议(HTTP/HTTPS)与实例开放的端口匹配——如果你的实例只监听80端口,就不要用HTTPS做健康检查。
  • 调整检查阈值:默认的健康检查超时(2秒)和间隔可能过短,实例启动时Gunicorn/Nginx未完全就绪就会触发失败。可将超时时间调至5秒,重试次数设为3次以上。

2. 修复Nginx的Host匹配问题

你的Nginx配置中server_name仅指定了域名datasource.fr www.datasource.fr,但ALB健康检查请求的Host头是实例私有IP或ALB内部域名,会导致Nginx匹配不到对应server块,返回404或默认页面。解决方式:

  • 修改现有server块,添加通配符匹配所有Host:
    server {
        listen 80;
        server_name datasource.fr www.datasource.fr _;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
  • 或者单独为健康检查路径配置不受Host限制的规则:
    location /health/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
    }
    
  • 执行nginx -T查看完整配置,确认没有优先级更高的默认server块干扰请求路由。

3. 验证实例启动后的服务状态

从AMI启动的ASG实例可能存在服务未自动就绪的问题:

  • 查看Gunicorn运行日志:journalctl -u gunicorn.service,确认服务是否正常启动、有无报错(比如依赖缺失、路径错误)。
  • 查看Nginx日志:/var/log/nginx/access.log和/var/log/nginx/error.log,检查健康检查请求是否到达实例、返回的状态码是什么。
  • 确保服务开机自启:执行systemctl is-enabled gunicorn和systemctl is-enabled nginx,若返回disabled,执行systemctl enable gunicorn和systemctl enable nginx后重新制作AMI。

4. 排查VPC网络与路由

  • ALB的健康检查请求从其所在子网发起,需确保ALB子网与ASG实例子网之间的路由通畅。如果ASG实例在私有子网,确认路由表允许ALB子网的流量进入。
  • 检查VPC的DNS配置:启用VPC的DNS解析和DNS主机名功能,否则ALB可能无法正确解析实例的私有IP。

5. 手动验证目标组连通性

  • 登录AWS控制台的目标组页面,查看实例的注册状态:若显示unhealthy,查看具体失败原因(如连接拒绝、超时、返回码错误)。
  • 在ALB所在子网启动临时EC2实例,手动测试访问ASG实例的健康检查端点:
    curl -I http://[实例私有IP]/health/
    
    若请求失败,说明实例服务或网络层存在问题;若请求成功,说明ALB健康检查配置有误。

内容的提问来源于stack exchange,提问作者Geoffrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:04:51