使用 Gunicorn(没有 nginx)直接使用 AWS ELB 有什么缺点?

What are the disadvantages of using AWS ELB directly with Gunicorn (no nginx)?

我在 Google 上发现的典型设置到 运行 AWS 上的 django 应用程序都建议像

这样的设置

ELB -> nginx -> gunicorn -> django

我想知道为什么这里真的需要 nginx 部分? ELB 还不够代理吗?

在我们的例子中,我们在 ECS 上的单个 docker 容器中 运行 设置多个 Gunicorn/django 实例。

如果没有 Nginx,它会工作得很好,而且您仍然可以免受大多数 DDOS 攻击,这些攻击可能会导致暴露的 gunicorn 服务器瘫痪。

我只能看到 Nginx 有助于将其添加到堆栈中,前提是它将为您的静态文件提供服务。但是,通过 S3(+ 云端作为奖励)提供静态文件要好得多,因为它具有高可用性和可靠性。

来源: http://docs.gunicorn.org/en/latest/deploy.html#nginx-configuration

我必须进行大量搜索才能获得令人满意的答案:

  1. ELB 不会让您免受 DDoS 攻击,它更像是一个通用负载均衡器。
  2. ELB 直接发送 传入请求到 Gunicorn 服务器。它在将请求转发给 Gunicorn 之前没有收到完整的请求,即,如果由于来自客户端的互联网连接不良或其他任何原因,来自请求的 headers/body 来得很慢,那么 Gunicorn 服务器将等待请求在开始处理请求之前完成。通常,允许同一台服务器同时作为 Web 服务器和应用程序服务器是一种不好的做法,因为这会占用应用程序服务器(Gunicorn)的资源。
  3. Nginx 还帮助提供静态文件 和 GZIP 压缩,从而使来自 client/server.
  4. 的 sending/receiving 数据更快

另外,即使在Gunicorn的文档中,也建议在它前面使用Nginx。