我需要在AWS ECS中使用nginx和AWS负载均衡器吗?

3

我正在使用AWS ECS中的Docker。我有一台带有AWS ECS Docker代理的EC2机器,并且ECS任务包含3个容器:

  • nginx容器
  • application-nodejs容器
  • staticfiles-nodejs-application容器。

我想支持非常大的流量。我需要设置AWS负载均衡器吗?还是我的nginx upstream设置就足够了?

nginx配置示例:

upstream appwww {                                                                                            
    server app-www:3000;                                                                                     
}                                                                                                             

server {                                                                                                      
    server_name  my.home.net;                                                                       

     location / {                                                                                             
        proxy_pass http://appwww;                                                                            
        proxy_http_version 1.1;                                                                               
        proxy_set_header Upgrade $http_upgrade;                                                               
        proxy_set_header Connection 'upgrade';                                                                
        proxy_set_header Host $host;                                                                          
        proxy_cache_bypass $http_upgrade;                                                                     
    }                                                                                                         

    listen 443 ssl http2; # managed by Certbot                                                                      
    ssl_certificate......; # managed by Certbot            
    ssl_certificate_key........ # managed by Certbot          
    include /.......# managed by Certbot                                     
    ssl_dhparam /.....pem; # managed by Certbot                                       

}                                                                                                             


server {                                                                                                      
    if ($host = my.host.net) {                                                                      
        return 301 https://$host$request_uri;                                                                 
    } # managed by Certbot                                                                                    


    listen       80;                                                                                          
    server_name  my.host.net;                                                                       
    return 404; # managed by Certbot                                                                          
}                                                                                                          

编辑

我已经画出了当前的架构图,并想要添加负载均衡器,应该把它放在哪里?自动扩展适用于这个架构图吗?应该使用一个还是多个EC2实例?多容器?多上游?

enter image description here

3个回答

5

建议您首先使用负载均衡器,因为:

  • 您可以在负载均衡器上配置SSL,并在负载均衡器处终止SSL
  • 您可以通过将负载均衡器配置为与AWS WAF集成,保护自己免受恶意攻击

  • 您可以在未来轻松添加更多目标

  • 没有负载均衡器需要您在应用程序级别进行SSL配置

  • 它支持健康检查。

  • 您将获得免费的ACM证书,可用于负载均衡器
  • 每年容易更新SSL证书

注意:考虑使用AWS S3和CloudFront来提供静态内容

向现有架构引入负载均衡器

应用程序负载均衡器现在支持基于主机的路由,这意味着可以使用多个域(或子域)指向多个网站。除了基于主机的路由之外,它还支持基于路径的路由。例如,当 mydomain.com/web1 指向 website1 时, mydomain.com/web2 可以指向 website2

我想不出您需要使用nginx的原因(除非我漏掉了什么)。

回答您的问题,我会这样做。

  • 引入应用程序负载均衡器
  • 通过ECS(Fargate)部署多个容器
  • 对于每个服务,我将有一个专用的目标组来管理扩展和健康检查。
  • 最后,我将进行基于主机的路由,s1.mydomain.com,s2.mydomain.com各指向不同的目标组(每个服务一个)

参考:https://aws.amazon.com/blogs/aws/new-host-based-routing-support-for-aws-application-load-balancers/

希望这可以帮助到您。


1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接