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

EC2实例搭配ELB与ACM配置Nginx HTTPS及健康检查问题

解决ELB+ACM下EC2 Nginx配置及健康检查异常问题

一、正确的Nginx配置

由于你已经通过ELB+ACM处理HTTPS加密,EC2实例上的Nginx只需要监听80端口,无需配置SSL证书。以下是完善后的配置:

server {
    listen 80;
    # 同时匹配域名和EC2私有IP,确保健康检查请求能被正确处理
    server_name <my domain name> <EC2 private IP>;

    # 健康检查专用路由,直接返回200,无需经过Gunicorn,提升可靠性
    location /health {
        return 200 "OK";
        add_header Content-Type text/plain;
    }

    location / {
        proxy_pass http://unix:<path to the gunicorn socket>;
        # 必须配置的代理头,确保Flask能正确识别客户端请求信息
        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; # 告诉Flask请求来自HTTPS
    }
}

配置完成后,重启Nginx生效:

sudo systemctl restart nginx

二、健康检查异常排查

按以下步骤逐一排查:

  1. 目标组配置验证

    • 确保健康检查路径设为/health(对应上面Nginx配置的路由),端口为80,HTTP状态码匹配200。
    • 确认目标组已正确注册EC2实例,实例状态不是"初始中"(若为初始中,等待5-10分钟再查看)。
  2. EC2安全组及防火墙检查

    • 入站规则需允许ELB所在安全组访问80端口(不要直接开放0.0.0.0/0,仅限ELB访问更安全)。
    • 检查EC2内部防火墙(如iptables)是否阻止了80端口的本地访问。
  3. 日志分析

    • 查看Nginx错误日志(通常在/var/log/nginx/error.log),确认Nginx启动正常,无socket文件权限、路径错误等问题。
    • 查看Nginx访问日志(/var/log/nginx/access.log),检查ELB的健康检查请求是否到达,返回的状态码是什么(若为404,说明路径不匹配;若为502,说明Gunicorn未正常运行)。
  4. Gunicorn状态验证

    • 确认Gunicorn正在运行:sudo systemctl status gunicorn
    • 检查socket文件存在且权限正确(Nginx用户需拥有读写权限,可通过sudo chown www-data:www-data <path to socket>调整)。

三、server_name设置说明

不需要将server_name改为EC2公网IP:

  • ELB转发请求时会保留客户端的Host头(即你的域名),因此设置为域名可以正确匹配用户的访问请求。
  • 加上EC2私有IP是为了兼容ELB的健康检查请求(ELB通常用实例私有IP发起健康检查),避免请求被Nginx的默认server块拦截。
  • 若不想指定具体域名和IP,也可以用server_name _;匹配所有Host头,配置更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:14:55