我有一个负载平衡器和一个位于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
路由流量。我到底在想什么?
答案 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端口