使用nginx反向代理在生产中设置龙卷风Web服务

时间:2013-02-07 11:08:11

标签: nginx tornado

在过去的几个月里,我一直在龙卷风中开发一个Web服务,在我的测试环境中运行我使用的服务:

python index.py

index.py是我的龙卷风应用程序处理程序,它侦听端口8001.然后我使用http://localhost:8001从Web服务请求。我现在正在将测试环境部署到应该镜像生产的临时环境中。我如何在生产中运行龙卷风?我猜我需要为应用程序创建某种守护进程,但我不知道从哪里开始!

1 个答案:

答案 0 :(得分:29)

您可以使用一些工具。

首先,Supervisord

Supervisord是一个“过程控制系统”,您可以配置流程并让Supervisor管理它们,如果它们失败,它将重新启动它们,使它们更容易管理并让它们在后台运行

这是一个示例主管配置文件

[program:myprogram] 
process_name=MYPROGRAM%(process_num)s
directory=/var/www/apps/myapp 
command=/var/www/apps/myapp/virtualenv/bin/python index.py --PORT=%(process_num)s
startsecs=2
user=youruser
stdout_logfile=/var/log/myapp/out-%(process_num)s.log
stderr_logfile=/var/log/myapp/err-%(process_num)s.log
numprocs=4
numprocs_start=14000

使用该配置,Supervisor将在端口14001-14004(numprocs)上启动index.py的4个(numprocs_start)实例。我们传递--PORT=%(process_num)s以使每个进程在不同的端口上启动。您应该更改numprocsnumprocs_start以适合您的环境/设备。通常我们运行2xCPU核心进程(因此四核处理器将有8个进程),但这可能会根据您的进程执行的操作以及代码中的阻塞程度而有很大差异。

接下来,配置NGINX以将请求转发到您的网站

   upstream myappbackend {
            server 127.0.0.1:14001  max_fails=3     fail_timeout=1s;
            server 127.0.0.1:14002  max_fails=3     fail_timeout=1s;
            server 127.0.0.1:14003  max_fails=3     fail_timeout=1s;
            server 127.0.0.1:14004  max_fails=3     fail_timeout=1s;
    }

    server {
            listen                                          4.5.6.7:80;
            server_name                                     example.com;

            access_log      /var/log/nginx/myapp.log  main;


            location / {
                    proxy_set_header                Host            $host;
                    proxy_set_header                X-Real-Ip       $remote_addr;
                    proxy_pass                      http://myappbackend/;
            }
    }      

该配置应该根据您的应用程序及其工作方式进行修改,这是一个非常小的配置,几乎肯定需要扩展,但这应该足以让您入门