【问题标题】:What are the disadvantages of using AWS ELB directly with Gunicorn (no nginx)?直接将 AWS ELB 与 Gunicorn 一起使用(没有 nginx)有什么缺点?
【发布时间】:2018-02-25 03:42:01
【问题描述】:

我在 Google 上找到的用于在 AWS 上运行 django 应用程序的典型设置都建议使用类似的设置

ELB -> nginx -> gunicorn -> django

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

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

【问题讨论】:

    标签: django amazon-web-services reverse-proxy gunicorn amazon-elb


    【解决方案1】:

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

    我只能看到 Nginx 有助于添加到堆栈中,如果它会为您的静态文件提供服务。但是,最好通过 S3 来提供您的静态文件(加上云端作为奖励),因为它具有高可用性和可靠性。

    来源: http://docs.gunicorn.org/en/latest/deploy.html#nginx-configuration https://stackoverflow.com/a/12801140

    【讨论】:

    • 如果客户端很慢,它会让你的 gunicorn 服务器变慢。 Nginx 让 gunicorn 可以轻松处理慢速客户端,并且只发送完全接收到的请求(所有 TCP 数据包),不确定 ELB 是否这样做。
    • @user1501382 您可以随时使用异步工作器(例如 gevent)来提高 gunicorn 的性能。当然,当您遇到大量负载时,您必须自动扩展您的 gunicorn 应用程序实例。为了性能和节省成本,nginx 对这两种情况都没有帮助。正如 OP 所说,只有当您想在同一主机上提供静态内容时,nginx 才会有所帮助。在大多数情况下,再次使用 CDN 是更好的选择。
    【解决方案2】:

    为了得到满意的答案,我不得不进行大量搜索:

    1. ELB 不会让您免受 DDoS 攻击,它更像是一个通用负载均衡器。
    2. ELB 直接将传入的请求发送到 Gunicorn 服务器。它在将请求转发到 Gunicorn 之前没有收到完整的请求,即,如果由于客户端的 Internet 连接不良或其他原因导致请求的标头/正文发送缓慢,则 Gunicorn 服务器将等待请求完成在它开始处理请求之前。一般来说,允许同一台服务器同时作为 Web 服务器和应用程序服务器是一种不好的做法,因为这会占用应用程序服务器 (Gunicorn) 的资源。
    3. Nginx 还有助于提供静态文件和 GZIP 压缩,从而加快从客户端/服务器发送/接收数据的速度。

    另外,即使在Gunicorn的文档中,前面也推荐使用Nginx。

    【讨论】:

      猜你喜欢
      • 2020-03-23
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多