详解python使用Nginx和uWSGI来运行python应用

  

uWSGI是一个Web应用服务器,它具有应用服务器,代理,进程管理及应用监控等功能。它支持WSGI协议,同时它也支持自有的uWSGI协议,该协议据说性能非常高,而且内存占用率低,为mod_wsgi的一半左右,我没有实测过。它还支持多应用的管理及应用的性能监控。虽然uWSGI本身就可以直接用来当Web服务器,但一般建议将其作为应用服务器配合Nginx一起使用,这样可以更好的发挥Nginx在网页端的强大功能。本文我们就来介绍如何搭建uWSGI + Ngnix环境来运行Python应用。

  

<>强安装uWSGI

        pip安装uwsgi      

让我们来写个Hello World的WSGI应用,并保存在“server.py”文件中:

        start_response def应用程序(环境):   状态=' 200 OK '=输出“Hello World !”      response_headers=[(“内容类型”、“文本/普通”),   内容长度(' ',str (len(输出))))   response_headers start_response(状态)      返回[输出]      

让我们在uWSGI中运行它,执行命令:

        uwsgi——http: 9090——wsgi-file server.py      

然后打开浏览器,访问“http://localhost: 9090”,你就可以看到“Hello World !”字样了。

  

上面的命令中“HTTP”参数指定了HTTP监听地址和端口,“——-wsgi-file”参数指定了WSGI应用程序入口,uWSGI会自动搜寻名为“应用程序”的应用对象并调用它。

  

更进一步,uWSGI可以支持多进程和多线程的方式启动应用,也可以监控应用的运行状态。我们将启动的命令改为:

  

代码如下:
  uwsgi——http: 9090美元——wsgi-file服务器。py——主进程4——线程2——统计127.0.0.1:9191
  

  

执行它后,uWSGI将启动4个应用进程,每个进程有2个线程,和一个主主进程(监控其他进程状态,如果有进程死了,则重启)。同时,你可以访问“127.0.0.1:9191”来获取JSON格式的应用运行信息,uWSGI还提供了工具命令“uwsgitop”来像前一样监控应用运行状态,你可以用脉冲来安装它。

  

上面的命令参数太多了,我们可以将参数写在配置文件里,启动uWSGI时指定配置文件即可。配置文件可以是键值对的格式,也可以是XML, YAML格式,这里我们使用键值对的格式。让我们创建一个配置文件“myapp.ini”:

        (uwsgi)   http=: 9090   wsgi-file=server.py   主=true   过程=4   线程=2   统计=127.0.0.1:9191      

然后就可以将启动命令简化为:

        美元uwsgi myapp.ini      

<>强配置Nginx

  

Nginx的安装可以参考这篇文章,文本采用的环境就是Ubuntu Linux,对于其他系统如Mac,基本上差不太多

  

首先,我们将uWSGI的HTTP端口监听改为套接字端口监听,即将配置文件中的“HTTP”项去掉,改为“套接字”项:

        (uwsgi)   套接字=127.0.0.1:3031   wsgi-file=server.py   主=true   过程=4   线程=2   统计=127.0.0.1:9191      

然后,打开Nginx的配置文件,Ubuntu上默认是"/etc/Nginx/sites-enabled/违约"文件,将其中的根路径部分配置为:

        位置/{   包括uwsgi_params;   uwsgi_pass 127.0.0.1:3031;   }      

这段配置表明Nginx会将收到的所有请求都转发到“127.0.0.1:3031”端口上,即uWSGI服务器上。现在让我们重启Nginx,并启动uWSGI服务器:

        $ sudo nginx重启服务   美元uwsgi myapp.ini      

访问“http://localhost”,我们会再次看到“Hello World !”

。   

<>强运行瓶应用

  

其实很简单,只要将上例中server.py的内容改为瓶应用即可,当然你需要先把瓶包安装好:

        从进口瓶瓶   应用=瓶(__name__)      @application.route (“/?   def指数():   返回的& lt; h2>你好World</h2>”      

很多人习惯将瓶应用对象取名为“应用程序”,但是WSGI标准是“应用程序”.uWSGI提供了一个功能,可以指定应用对象,方法就是在配置文件中加上“可赎回”项:

        (uwsgi)   …   可调用的=应用      

现在,我们的瓶应用就可以使用“应用”作为对象名了

        从进口瓶瓶   应用=瓶(__name__)      @app.route(“/?   def指数():   返回的& lt; h2>你好World</h2>”

详解python使用Nginx和uWSGI来运行python应用