我是否需要在 AWS ECS 中使用带有 nginx 的 AWS 负载均衡器?

Jon*_*Sud 3 nginx amazon-ec2 amazon-ecs docker

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

  • Nginx 容器
  • 应用程序-nodejs容器
  • staticfiles-nodejs-应用程序容器。

我想支持非常巨大的流量。我需要设置AWS负载均衡器吗?或者我对nginx上游的设置就足够了?

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                                                                          
}                                                                                                          
Run Code Online (Sandbox Code Playgroud)

编辑

我画了当前的架构,我想添加LoadBalancer,我应该把它放在哪里?自动缩放适合这张图吗?我应该使用一台或多台 ec2 机器吗?多容器?多上游?

在此输入图像描述

Aru*_*han 5

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

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

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

  • 缺少负载均衡器需要您在应用程序级别配置 SSL

  • 它支持健康检查。

  • 您获得免费的 ACM 证书以与负载均衡器一起使用
  • 每年轻松更新 SSL 证书

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

将负载均衡器引入您现有的架构

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

希望这可以帮助。