如何通过Amazon EC2在Gunicorn上设置Nginx代理缓冲?

时间:2013-05-24 17:27:05

标签: django nginx amazon-web-services gunicorn

我的Django应用程序托管在Amazon EC2上。 Gunicorn在同一台机器上运行,并提供我所拥有的所有动态内容。没有静态内容。我有两台这样的机器(两台机器都在微型实例上运行Ubuntu 11.04。这些机器很容易水平扩展)我有一台ELB(Elastic Load Balancer)坐在这两台服务器的前面。

为了举例,这两台gunicorn / django ubuntu机器的外部ip是:

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

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

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

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

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

enter image description here

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

3 个答案:

答案 0 :(得分:4)

我相信你正在寻找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有点生疏,所以它可能不起作用但它应该是这些行

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果你想在EC2上使用Ubuntu服务器主持这些是一些很好的教程,除了Nathan提到的那个。

最好的部署运气。如果您觉得答案有帮助,请接受答案