AWS-目标组负载平衡器

时间:2020-04-12 10:00:37

标签: amazon-web-services nginx amazon-elb

我有一个负载平衡器和一个位于LB后面的Nginx。

下面是nginx配置。

upstream app {
    server service_discovery_name.local:5005;
}

server {   // Reverse proxy for VPC ES to be available on public

    listen 80;

    location / {
        proxy_pass vpc-es-domain-url;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {  // reverse proxy for django app

    listen 8005;

    location / {
        proxy_pass http://app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }
}

我有一个侦听器连接到ALB,在端口80上侦听,它将流量转发到目标IP。目标组具有Nginx容器的私有IP。我使用Fargate-ECS容器。

现在,当我路由到ALB_url:80时,它将打开elasticsearch。但是,当我路由到ALB_url:8005时,它无法加载任何内容。 django_app正在端口5005上运行,请通过显式浏览到IP =:5005进行检查。

我相信nginx配置是正确的。我希望通过ALB -> Nginx -> apps路由流量。我到底在想什么?

1 个答案:

答案 0 :(得分:0)

在配置ALB时,您必须创建一个侦听器,指定端口和操作(将请求转发给目标组或进行重定向),您可以使用不同的端口创建一个多重侦听器,例如,您可以拥有一个侦听器侦听80端口并重定向到HTTP,另一个侦听器使用443端口将请求转发到目标组。

据此,我了解到您的配置是: -ALB侦听80端口并将请求发送到目标组。 -目标组侦听80端口并将请求发送到Fargate Task(nginx服务器)

当您路由到ALB_URL:80时,请求将通过80端口转发到目标组,并且该请求将发送到Fargate任务。但是,当您路由到ALB_URL:8005时,该操作将无效,因为ALB没有该端口的侦听器。

您可以创建一个具有8005端口的侦听器,该侦听器将请求转发到在8005中侦听的目标组。使用此配置,当您路由ALB_url:8005时,请求将发送到创建的TG,然后将其发送到Fargate任务,会将配置纳入Nginx配置。

ALB --->侦听器80 ---->目标Groupt端口80 ----> ECS任务Nginx

ALB->侦听器8005->目标Groupt端口8005 ----> ECS任务Nginx

不要忘记验证安全组以允许8005端口

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-routing-configuration