在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 相关文章推荐
python连接mysql并提交mysql事务示例
Mar 05 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
python生成随机图形验证码详解
Nov 08 Python
python处理csv中的空值方法
Jun 22 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
python区分不同数据类型的方法
Oct 14 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
一行代码python实现文件共享服务器
Apr 22 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
php获取表单中多个同名input元素的值
2014/03/20 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
onpropertypchange
2006/07/01 Javascript
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
python3简单实现微信爬虫
2015/04/09 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
Python 多维List创建的问题小结
2019/01/18 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
python实现各种插值法(数值分析)
2019/07/30 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
python hashlib加密实现代码
2019/10/17 Python
如何基于python操作excel并获取内容
2019/12/24 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
邀请书格式范文
2015/02/02 职场文书
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android