详解Django+Uwsgi+Nginx 实现生产环境部署


Posted in Python onNovember 06, 2018

uwsgi介绍

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

安装uwsgi

pip install uwsgi

uwsgi不支持windows

测试启动

创建测试文件并写入:

def application(environ, start_response): 
status = '200 OK' 
output = 'Hello World! powerde by wsgi' 
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))] 
start_response(status, response_headers)
return [output.encode('utf8'),]

执行命令:

uwsgi --http :8080 --file test.py

浏览器访问该端口,正常情况下能得到输出。

用 uwsgi 启动django

uwsgi --http :8080 --file django_project/wsgi.py

页面能访问,但是静态文件无法加载,需要

uwsgi --http :8080 --file django_project/wsgi.py --static-map=/static=static

静态文件就能加载了。

参数说明:

  • http 这个就和 runserver 一样指定 IP 端口
  • file 这个文件就里有一个反射,如果你在调用他的时候没有指定Web Server就使用默认的
  • static 做一个映射,指定静态文件

uwsgi配置文件启动django项目

uwsgi 支持的参数还挺多的,可以将他们写在配置文件中。在项目同级目录创建 uwsgi.ini 文件:

# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/opt/webvirtcloud/
# 指定项目的application
module=webvirtcloud.wsgi:application
# 指定sock的文件路径 
socket=/tmp/uwsgi.sock
# 进程个数 
workers=5
pidfile=/tmp/uwsgi.pid
# 指定IP端口 
http=0.0.0.0:8080 # 如果和ngxin结合,本行注释掉
# 指定静态文件
static-map=/static=/opt/webvirtcloud/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/var/log/uwsgi.log

更多参数可见: https://uwsgi-docs.readthedocs.io/en/latest/Options.html

执行命令: uwsgi --ini uwsgi.ini ,命令都不再用shell终端,即使断开shell连接,页面仍然能访问。

那要如何关闭或重启它呢?

uwsgi --stop /tmp/uwsgi.pid

配置nginx

找到Nginx的配置文件,用虚拟域名的就在虚拟域名里写:

server {
listen 80;
server_name localhost;

location / { 
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; //必须和uwsgi中socket的设置一致
client_max_body_size 35m;
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python isinstance判断对象类型
Sep 06 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
python读取oracle函数返回值
Jul 18 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
浅谈python之新式类
Aug 12 Python
python的concat等多种用法详解
Nov 28 Python
使用Python横向合并excel文件的实例
Dec 11 Python
python实现从wind导入数据
Dec 03 Python
关于python 跨域处理方式详解
Mar 28 Python
python实现交并比IOU教程
Apr 16 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 #Python
详解Python 正则表达式模块
Nov 05 #Python
用python3教你任意Html主内容提取功能
Nov 05 #Python
用Python实现读写锁的示例代码
Nov 05 #Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 #Python
详解Python下Flask-ApScheduler快速指南
Nov 04 #Python
Python中修改字符串的四种方法
Nov 02 #Python
You might like
PHP中动态HTML的输出技术
2006/10/09 PHP
js代码实现微博导航栏
2015/07/30 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
python服务器与android客户端socket通信实例
2014/11/12 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
Python中的heapq模块源码详析
2019/01/08 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
对python中各个response的使用说明
2020/03/28 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
护理中职生求职信范文
2014/02/24 职场文书
小学数学教研活动总结
2014/07/01 职场文书
2016大一新生军训感言
2015/12/08 职场文书
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技