在 Nginx 上运行多个 FCGI/Django 以实现负载分担

在 Nginx 上运行多个 FCGI/Django 以实现负载分担

我在 Nginx/FastCGI/Django 上运行 Web 服务。我们的处理时间相当长且占用大量 CPU,我希望能够运行多个 Django/FastCGI 进程来分担负载。如何设置 Nginx 以将来自单个源的请求路由到多个 Django/FastCGI 实例?(我可以在多个端口/套接字上运行多个实例,但我不知道如何让 Nginx 在它们之间分担处理负载。)

任何帮助都非常感谢。

答案1

http://wiki.nginx.org/NginxHttpUpstreamModule

与 proxy_pass 和 fastcgi_pass 配合使用。

答案2

我知道这个问题是关于 fastcgi 的,但使用 nginx 生成和负载平衡 Python Web 应用程序集群的最简单、最快捷的方法是不使用 fastcgi 模块,而是使用“uWSGI”模块。nginx 配置示例:

upstream uwsgicluster {
     server 127.0.0.1:9001;
     server 192.168.100.101:9001;
     server 192.168.100.102:9001;
     server 192.168.100.103:9001;
     server 192.168.100.104:9001;
}

server {
    listen   80;
    server_name www.mysite.com mysite.com;
    access_log /srv/www/mysite.com/logs/access.log;
    error_log /srv/www/msysite.com/logs/error.log;

    location / {
        include        uwsgi_params;
        uwsgi_pass     uwsgicluster;
    }

    location /static {
        root   /srv/www/mysite.com/public_html/static/;
        index  index.html index.htm;
    }
}

uWSGI 网站在这里 projects.unbit.it/uwsgi/ 请务必查看此处包含 Django 的示例页面:http://projects.unbit.it/uwsgi/wiki/示例

答案3

根据官方网站,你可以使用以下参数生成 fcgi:

cd {项目位置}

python./manage.py runfcgi--settings={项目}.settings_production maxchildren=10\

maxspare=5 minspare=2 方法=prefork socket={project_location}/log/django.sock pidfile={project_location}/log/django.pid

或者可能以与 php-fcgi 在其配置脚本中的工作方式相同,其中我(在/etc/init.d/php-fcgi):

PHP_FCGI_CHILDREN=5

相关内容