首页 > 网站 > Nginx > 正文

详解使用Nginx和uWSGI配置Python的web项目的方法

2024-08-30 12:26:28
字体:
来源:转载
供稿:网友

基于python的web项目,常见的部署方法有:

      fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。       wsgi:利用http服务的mod_wsgi模块来跑各个project。

不过还有个uwsgi,它既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据作者说该协议大约是fcgi协议的10倍那么快。uWSGI的主要特点如下:

       超快的性能。        低内存占用(实测为apache2的mod_wsgi的一半左右)。        多app管理。        详尽的日志功能(可以用来分析app性能和瓶颈)。        高度可定制(内存大小限制,服务一定次数后重启等)。

环境ubuntu 12.04 IP:10.1.6.79

安装nginx

apt-get install nginx-full nginx-common

nginx配置/etc/nginx/sites-enabled/example

server {    listen     80;    server_name   10.1.6.79;    access_log   /var/log/nginx/example_access.log;    error_log    /var/log/nginx/example_error.log;    root      /var/www/example;    location / {      uwsgi_pass   127.0.0.1:9001;      include     uwsgi_params;      uwsgi_param   UWSGI_SCHEME $scheme;      uwsgi_param   SERVER_SOFTWARE  nginx/$nginx_version;    }}

安装uwsgi

apt-get install uwsgi uwsgi-plugin-python

    如果你想安装所有的uwsgi插件,则可以安装uwsgi-plugin-all软件包

uwsgi配置/etc/uwsgi/apps-enabled/default.xml

<uwsgi>  <plugin>python</plugin>  <socket>127.0.0.1:9001</socket>  <pythonpath>/var/www/example/app/</pythonpath>  <app mountpoint="/">    <script>wsgi_configuration_module</script>  </app>  <master/>  <processes>4</processes>  <reload-mercy>8</reload-mercy>  <cpu-affinity>1</cpu-affinity>  <max-requests>2000</max-requests>  <limit-as>512</limit-as>  <reload-on-as>256</reload-on-as>  <reload-on-rss>192</reload-on-rss>  <no-orphans/>  <vacuum/></uwsgi>

    uwsgi配置文件中的参数也可以在命令行通过uwsgi指定,配置文件除了xml格式外,还可以写成ini格式的,软件包安装完毕后在/usr/share/doc/uwsgi/examples/conffile目录下会有一些xml和ini格式配置文件的例子。

wsgi_configuration_module.py脚本内容

#!/usr/bin/pythonimport osimport syssys.path.append('/var/www/example/app')os.environ['PYTHON_EGG_CACHE'] = '/var/www/example/.python-egg'def application(environ, start_response):  status = '200 OK'  output = 'Hello World!'  response_headers = [('Content-type', 'text/plain'),          ('Content-Length', str(len(output)))]  start_response(status, response_headers)  return [output]            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表