【问题标题】:How can I setup Nginx Proxy Buffering with Gunicorn over Amazon EC2?如何在 Amazon EC2 上使用 Gunicorn 设置 Nginx 代理缓冲?
【发布时间】:2013-05-20 09:11:25
【问题描述】:

我的 Django 应用程序托管在 Amazon EC2 上。 Gunicorn 在同一台机器上运行并提供我拥有的所有动态内容。没有静态内容。我有两台这样的机器(两台机器都在一个微型实例上运行 Ubuntu 11.04。它们很容易水平扩展)并且我在这两台服务器前面都有一个 ELB(弹性负载均衡器)。

举个例子,这两个 gunicorn/django ubuntu 机器的外部 ip 是:

12.34.567.12:8000 & 21:43:765:21:8000 (gunicorn runs on port 8000). 

如果我将这些地址中的任何一个放入我的浏览器,我就可以与我的服务器交互并发送/检索数据。

当我在这两台机器前面放置一个 ELB 时,我可以用来与 BOTH DJANGO/GUNICORN SERVERS 交互的新地址是:

dualstack.myloadbalancer-123456789.us-east-1.elb.amazonaws.com:8000

当我在互联网上阅读大量资源时,许多人建议在 ELB 后面的 Django 应用服务器前面放置一个 NGINX 盒子,以缓冲慢速客户端的请求。我认为这将是一个很好的功能,因为我不想丢失任何请求。下图会解释的更清楚:

就像上图一样,我如何配置位于 django app/gunicorn 服务器前面的 nginx 盒子充当反向代理,以便它可以缓冲慢速客户端的请求? (这样,它不会超时,而是保留请求而不会丢失它)

【问题讨论】:

    标签: django nginx amazon-web-services gunicorn


    【解决方案1】:

    我相信你正在寻找 nginx HttpProxyModule。 你在 nginx 中定义一个上游

    upstream webservers {
        server 12.34.567.12:8000;
        server 21.43.765.21:8000;
    }
    

    然后通过 proxy_pass 将请求转发到上游。

    server {
        listen 443; //Port you want nginx to listen on
        location / {
            proxy_set_header Host $http_host;
            proxy_read_timeout 330;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://webservers ;
         }
    }
    

    除非我弄错了,否则 HttpProxyModule 会在传递整个请求之前对其进行缓冲。 这可能会破坏一些在此过程中需要流式传输或交互的项目,但这是您面临的限制。

    我的 nginx 有点生锈了,所以它可能无法正常工作,但应该是这样的

    【讨论】:

    • 您的回答似乎很有希望。所以现在我的问题是,我现在是否将我的客户端指向 nginx 服务器(假设 nginx 服务器的外部 ip 是 10.12.13.22)?由于 nginx 正在缓冲来自 12.34.567.12:8000 和 21.43.765.21:8000 的请求,我会将它们指向 10.12.13.22:8000 吗?
    • 在示例中,端点将是 10.12.13.22:443,因为它是使用 listen 指令选择的。但是,这可以是您想要的任何端口。
    • 是的,确实如此,我忘记接受你的回答了!谢谢你提醒我!
    【解决方案2】:

    如果您希望使用 Ubuntu 服务器在 EC2 上进行托管,那么除了 Nathan 提到的教程之外,这些都是一些不错的教程。

    祝您部署顺利。如果您觉得答案有帮助,请采纳答案

    【讨论】:

    • 我编辑了我的问题以使其更清晰。与其在与应用服务器相同的机器上运行 nginx,不如在单独的机器上运行它以缓冲请求不是更理想吗?我所有的内容都是动态的,没有一个是静态的。我对 nginx 的唯一用途就是代理缓冲。
    【解决方案3】:

    你肯定希望 nginx 坐在 gunicorn 前面。这是一个常见的设置,您可以找到很多资源来帮助您入门。我喜欢这个教程:http://senko.net/en/django-nginx-gunicorn/,它还将引导您完成 supervisord 并设置 virtualenv。

    【讨论】:

    • 我正在编辑我的问题以使其更清晰。我对 nginx 或它的配置不太熟悉。据我所知,人们说它是一个非常好的 nginx 代理缓冲区。因此,它不会让慢速连接超时,而是保留它们并缓冲它们请求的数据。我在每台机器上运行 3 个 gunicorn 工人。我将如何配置 nginx 以很好地使用此设置?我将用于配置 nginx 的适当字段和值是什么?非常感谢您的专业知识!
    猜你喜欢
    • 2021-12-28
    • 2012-05-29
    • 2012-12-31
    • 2023-03-06
    • 2015-10-18
    • 2016-05-06
    • 2023-03-25
    • 2012-06-06
    • 2017-06-29
    相关资源
    最近更新 更多