3

我的 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 盒子充当反向代理,以便它可以缓冲慢速客户端的请求?(这样,它不会超时,而是保留请求而不会丢失它)

4

3 回答 3

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 有点生锈,所以它可能无法正常工作,但它应该是这样的

于 2013-06-03T14:53:18.800 回答
1

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

于 2013-05-24T17:31:15.773 回答
0

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

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

于 2013-05-25T18:37:42.980 回答