在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  Django中的apps.py的目的是什么
Oct 15 Python
python仿抖音表白神器
Apr 08 Python
使用python实现简单五子棋游戏
Jun 18 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
python Canny边缘检测算法的实现
Apr 24 Python
python缩进长度是否统一
Aug 02 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 Python
Python使用BeautifulSoup4修改网页内容
May 20 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
浅析is_writable的php实现
2013/06/18 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
python数组过滤实现方法
2015/07/27 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
Python中字符串与编码示例代码
2019/05/20 Python
python脚本开机自启的实现方法
2019/06/28 Python
Python 转换文本编码实现解析
2019/08/27 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
工程部主管岗位职责
2013/11/17 职场文书
内衣营销方案
2014/03/15 职场文书
市场调查策划方案
2014/06/10 职场文书
解除施工合同协议书
2014/10/17 职场文书
2015年化验室工作总结
2015/04/23 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS