在Linux系统上通过uWSGI配置Nginx+Python环境的教程


Posted in Python onDecember 25, 2015

1.安装ubuntu有uwsgi的ppa:

add-apt-repository ppa:stevecrozz/ppa 
apt-get update 
apt-get install uwsgi

2. 用uwsgi代替mod_wsgi

Nginx 的整体配置这里不说了,假设已经明白 Nginx的基本配置,那么uwsgi就类似这么配置:

location / { 
   include uwsgi_params 
   uwsgi_pass 127.0.0.1:9090 
  }

再比如django就是:

....... 
 from django.core.handlers.wsgi import WSGIHandler 
 application = WSGIHandler()

然后运行uwsgi监听9090,其中-w后跟模块名,也就是刚才配置的myapp

uwsgi -s :9090 -w myapp

运行网站发现已经部署完成了。

3.uwsgi的参数

以上是单个project的最简单化部署,uwsgi还是有很多令人称赞的功能的,例如:

并发4个线程:

uwsgi -s :9090 -w myapp -p 4

主控制线程+4个线程:

uwsgi -s :9090 -w myapp -M -p 4

执行超过30秒的client直接放弃:

uwsgi -s :9090 -w myapp -M -p 4 -t 30

限制内存空间128M:

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128

服务超过10000个req自动respawn:

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000

后台运行等:

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log

4.为uwsgi配置多个站点

为了让多个站点共享一个uwsgi服务,必须把uwsgi运行成虚拟站点:去掉“-w myapp”加上”?vhost”:

uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost

然后必须配置virtualenv,virtualenv是Python的一个很有用的虚拟环境工具,这样安装:

apt-get install Python-setuptools
 easy_install virtualenv

然后设置一个/多个app基准环境:

virtualenv /var/www/myenv

应用环境,在此环境下安装的软件仅在此环境下有效:

source /var/www/myenv/bin/activate 
 pip install django 
 pip install mako 
 ...

最后配置nginx,注意每个站点必须单独占用一个server,同一server不同location定向到不同的应用不知为何总是失败,估计也 算是一个bug。

server { 
     listen    80; 
     server_name app1.mydomain.com; 
     location / { 
         include uwsgi_params; 
         uwsgi_pass 127.0.0.1:9090; 
         uwsgi_param UWSGI_PYHOME /var/www/myenv; 
         uwsgi_param UWSGI_SCRIPT myapp1; 
         uwsgi_param UWSGI_CHDIR /var/www/myappdir1; 
     } 
   } 
   server { 
     listen    80; 
     server_name app2.mydomain.com; 
     location / { 
         include uwsgi_params; 
         uwsgi_pass 127.0.0.1:9090; 
         uwsgi_param UWSGI_PYHOME /var/www/myenv; 
         uwsgi_param UWSGI_SCRIPT myapp2; 
         uwsgi_param UWSGI_CHDIR /var/www/myappdir2; 
     } 
   }

这样,重启nginx服务,两个站点就可以共用一个uwsgi服务了。

Python 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
Python实现把xml或xsl转换为html格式
Apr 08 Python
python执行get提交的方法
Apr 29 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
Python虚拟环境venv用法详解
May 25 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 #Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 #Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 #Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 #Python
在Mac OS上搭建Python的开发环境
Dec 24 #Python
详解Python字符串对象的实现
Dec 24 #Python
浅谈Python单向链表的实现
Dec 24 #Python
You might like
理解PHP5中static和const关键字的区别
2007/03/19 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
JavaScript 的继承
2011/10/01 Javascript
javascript工具库代码
2012/03/29 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
python 解决函数返回return的问题
2020/12/05 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
大学生自我鉴定评语
2014/01/27 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
公司欠款证明
2015/06/24 职场文书
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers