生产环境中的数据流

参考文档:

wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323

wsgi协议介绍(萌新版):https://blog.csdn.net/j163you/article/details/80919360

廖雪峰web编程讲解:https://www.liaoxuefeng.com/wiki/897692888725344/923057027806560

WSGI是什么?

  1. WSGI是一种规范,它定义了使用python编写的web app(django)与web server(uWSGI)之间接口格式,实现web app与web server间的解耦。

  1. WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行

  1. WSGI实质:WSGI是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范、协议。

为什么需要web协议:

 1)不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

 2) 这样,服务器程序就需要为不同的框架提供不同的支持,只有支持它的服务器才能被开发出的应用使用,显然这是不可行的。

 3)web协议本质:就是定义了Web服务器和Web应用程序或框架之间的一种简单而通用的接口规范。

Web协议介绍

 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi

 1. CGI: 最早的协议

 2. FCGI: 比CGI快

  1. WSGI: Python专用的协议

  2. uwsgi: 比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据, 议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.

uwsgi是什么?

  1. 它是一个二进制协议,可以携带任何类型的数据。

  2. 一个uwsgi分组的头4个字节描述了这个分组包含的数据类型。

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

uWSGI是什么?(web服务器 和nginx类似)

  1. 什么是uWSGI: uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。

  1. uWSGI**作用:**它要做的就是把HTTP协议转化成语言支持的网络协议,比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

  1. uWSGI特点:轻量级,易部署,性能比nginx差很多

 注:

  如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件   如果架构是uWSGI+APP,uWSGI是一个服务器

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

  • WSGI是一种通信协议。通常用户django框架和uWSGI服务器之间通信。(如果说的更细致的话就是用来和Python WSGI model)

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

  • 而uWSGI是实现了uwsgi和WSGI等协议的Web服务器

nginx是什么?

  1. Nginx是一个Web服务器,其中的HTTP服务器功能和uWSGI功能很类似

  2. 但是Nginx还可以用作更多用途,比如最常用的反向代理、负载均衡、拦截攻击等,而且性能极高

django是什么?

 1. Django是一个Web框架,框架的作用在于处理request和 reponse,其他的不是框架所关心的内容。

 2. 所以如何部署Django不是Django所需要关心的。

请求处理整体流程     

  • nginx接收到浏览器发送过来的http请求,将包进行解析,分析url

  • 静态文件请求:就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件

  • 动态接口请求:那么nginx就将请求转发给uWSGI,最后到达django处理

各模块作用

 1. nginx:是对外的服务器,外部浏览器通过url访问nginx,nginx主要处理静态请求

 2. uWSGI:是对内的服务器,主要用来处理动态请求

 3. uwsgi:是一种web协议,接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi

 4. WSGI:是python专用的web协议,根据请求调用应用程序(django)的某个文件,某个文件的某个函数

 5. django:是真正干活的,查询数据等资源,把处理的结果再次返回给WSGI, WSGI 将返回值进行打包,打包成uwsgi能够接收的格式

 6. uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器

Django + uWSGI方案

 1. 没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。

 2. nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。

 3. 而uwWSGI则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。

nginx和uWSGI特点

 1)nginx的作用

  1.反向代理,可以拦截一些web攻击,保护后端的web服务器

  2.负载均衡,根据轮询算法,分配请求到多节点web服务器

  3.缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

2)uWSGI的适用

  1.单节点服务器的简易部署

  2.轻量级,好部署

Django + uWSGI+ Nginx 的生产环境部署

1、在centos 7中安装python3环境

  1. # 1、yum更新yum源
  2. yum update
  3. # 2、安装Python 3.7所需的依赖否则安装后没有pip3包
  4. yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
  5. # 3、在官网下载所需版本,这里用的是3.7.0版本
  6. wget https://www.python.org/ftp/3.7.0/Python-3.7.0.tgz
  7.   2、安装Python
  8.  
  9. # 1、解压
  10. tar -xvf Python-3.7.0.tgz
  11.  
  12. #2、配置编译
  13. cd Python-3.7.0
  14. ./configure --prefix=/usr/local/python3 # 配置编译的的路径(这里--prefix是指定编译安装的文件夹)
  15. ./configure --enable-optimizations # 执行该代码后,会编译安装到 /usr/local/bin/ 下,且不用添加软连接或环境变量
  16. make && make install
  17. ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 添加软连接
  18. ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
  19.  
  20. #3、将/usr/local/python3/bin加入PATH
  21. [root@linux-node1 testProj]# vim /etc/profile
  22. #然后在文件末尾添加
  23. export PATH=$PATH:/usr/local/python3/bin
  24.  
  25. [root@linux-node1 testProj]# source /etc/profile # 修改完后,还需要让这个环境变量在配置信息中生效,执行命令

centos7安装python3

2、初始化一个django项目

  1. [root@linux-node1 /]# pip3 install django==2.0.4
  2. [root@linux-node1 /]# mkdir /code/
  3. [root@linux-node1 /]# cd /code/
  4. [root@linux-node1 testProj]# django-admin startproject mmcsite
  5. [root@linux-node1 testProj]# cd /code/mmcsite
  6. [root@linux-node1 testProj]# python3 manage.py runserver 0.0.0.0:8000
  7. # 页面中访问:http://192.168.56.11:8000/

初始化django项目

3、安装uWSGI 并使用uWSGI启动这个服务

  1. '''1. 安装uwsgi'''
  2. [root@linux-node1 /]# pip3 install uwsgi
  3. [root@linux-node1 /]# ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
  4.  
  5. '''2. 配置uwsgi.ini启动文件'''
  6. [root@linux-node1 /]# vim uwsgi.ini
  7. [uwsgi]
  8. socket = 0.0.0.0:3031
  9. chdir = /code/mmcsite
  10. wsgi-file = /code/mmcsite/wsgi.py
  11. processes = 5
  12. threads = 30
  13. master = true
  14. daemonize = /code/mmcsite/uwsgi.log
  15. module=mmcsite.wsgi
  16. pidfile = /code/mmcsite/uwsgi.pid
  17. chmod-socket=666
  18. enable-threads = true
  19.  
  20. '''3. 使用uwsgi启动django:一定要在这个项目目录中'''
  21. [root@linux-node1 /]# uwsgi --http 192.168.56.11:80 --file mmcsite/wsgi.py --static-map=/static=static
  22. 访问项目:http://192.168.56.11

uWSGI启动项目

4、配置uWSGI文件

  1. [root@linux-node2 demo2]# vim /code/mmcsite/uwsgi.ini # uwsgi.ini文件
  1. [uwsgi]
  2. socket = 0.0.0.0:3031 # 指定socket监听的地址和端口
  3. chdir = /code/mmcsite # 项目路径
  4. wsgi-file = /code/mmcsite/wsgi.py # django的wsgi文件路径
  5. processes = 5 # 启动五个进程
  6. threads = 30 # 每个进程启动30个线程
  7. master = true
  8. daemonize = /code/mmcsite/uwsgi.log # 日志存放路径
  9. module=mmcsite.wsgi # 使用mmcsite.wsgi模块
  10. pidfile = /code/mmcsite/uwsgi.pid # uwsgi启动进程id存放路径
  11. chmod-socket=666 # socket权限
  12. enable-threads = true # 允许用内嵌的语言启动线程,这将允许你在app程序中产生一个子线程

uwsgi.ini

5、安装配置nginx

安装nginx

  1. '''1. 配置nginx YUM源'''
  2. [root@linux-node1 /] vim /etc/yum.repos.d/nginx.repo
  3. ```
  4. [nginx]
  5. name=nginx repo
  6. # 下面这行centos根据你自己的操作系统修改比如:OS/rehel
  7. # 6是你Linux系统的版本,可以通过URL查看路径是否正确
  8. baseurl=http://nginx.org/packages/centos/7/$basearch/
  9. gpgcheck=0
  10. enabled=1
  11. ```
  12. '''2. 安装nginx'''
  13. [root@linux-node1 /] yum -y install nginx

nginx安装

配置nginx

  1. [root@linux-node1 /]# vim /etc/nginx/conf.d/django.conf
  1. server {
  2. listen 8888;
  3. server_name 192.168.56.11;
  4. client_max_body_size 5M;
  5. gzip on;
  6. gzip_buffers 32 4K;#压缩在内存中缓冲32 每块4K
  7. gzip_comp_level 6 ;#压缩级别 推荐6
  8. gzip_min_length 4000;#开始压缩的最小长度4bit
  9. gzip_types text/plain application/json application/javascript application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp;
  10. location / {
  11. include uwsgi_params;
  12. uwsgi_pass 127.0.0.1:3031;
  13. uwsgi_ignore_client_abort on;
  14. }
  15.  
  16. error_page 404 /404.html;
  17. location = /40x.html {
  18. }
  19.  
  20. error_page 500 502 503 504 /50x.html;
  21. location = /50x.html {
  22. }
  23.  
  24. }

django.conf

6、启动项目

  1. [root@linux-node1 demo2]# systemctl restart nginx # 开启nginx
  2. [root@linux-node1 demo2]# uwsgi --ini uwsgi.ini # 启动uwsgi的django项目
  3.                                 # http://192.168.56.11:8888/ 访问项目
  4. [root@linux-node1 demo2]# uwsgi --stop uwsgi.pid # 关闭uwsgi

Django+Nginx+uWSGI生产环境部署的更多相关文章

  1. django+nginx+python3 生产环境部署

    一.安装python基础环境 1.安装各类基础模块 yum install  gcc-c++ wget openssl-devel bzip2-devel expat-devel gdbm-devel ...

  2. 10: Django + Uwsgi + Nginx 的生产环境部署

    1.1 一些重要概念 1.Web协议介绍 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi 1. CGI:  最早的协议 2. FCGI:  比CGI快 ...

  3. Django + Uwsgi + Nginx 的生产环境部署实战

    目录 Django + Uwsgi + Nginx 的生产环境部署实战 安装Uwsgi 一.使用命令来启动django项目 二.使用配置文件来启动我们的Django项目 安装Nginx 配置Nginx ...

  4. 11: Django + gunicorn + Nginx 的生产环境部署

    1.1 gunicorn介绍   1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...

  5. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  6. ubuntu Django + Uwsgi + Nginx 的生产环境部署

    一.概述 使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇 ...

  7. Django + Uwsgi + Nginx 实现生产环境部署

    本节内容 uwsgi 介绍 uwsgi安装使用 nginx安装配置 django with nginx 如何在生产上部署Django? Django的部署可以有很多方式,采用nginx+uwsgi的方 ...

  8. django项目的生产环境部署,利用nginx+uwsgi

    1.坏境准备 centos6.5 django项目 python坏境(python3.6,) 所需的各种模块(django,uwsgi,sqlite3)具体看坏境 我的测试django项目的数据库用的 ...

  9. CentOS上部署Django+Nginx+Uwsgi环境

    在CentOS上部署Django+Nginx+Uwsgi环境 奇谭  2016-09-01 评论  Linux  python django nginx uwsgi VirtualEnv的作用:创建隔 ...

随机推荐

  1. 关于H5页面在微信浏览器中音视频播放的问题

    Android 上,因为各个软件使用的浏览器渲染引擎不一样,所以视频播放的效果差异也很大,这里主要以微信为主.微信使用的是腾讯浏览器自带的X5内核. 而iOS是不允许使用第三方浏览器内核的,就是Goo ...

  2. 【Python】如何结束退出 py 脚本

    需求 当你运行脚本,在判断条件满足时,就退出脚本,结束本次执行. 方法 使用 sys.exit(),直接退出程序,但是会引发一个 SystemExit 异常: 该方法包含一个 status 参数 sy ...

  3. laravel 控制器中获取不到session

    protected $middleware = [ \Illuminate\Session\Middleware\StartSession::class, ]; 在 kernel.php中 加入Sta ...

  4. html中创建并调用vue组件的几种方法

    最近在写项目的时候,总是遇到在html中使用vue.js的情况,且页面逻辑较多,之前的项目经验都是使用脚手架等已有的项目架构,使用.vue文件完成组价注册,及组件之间的调用,还没有过在html中创建组 ...

  5. 淘宝客?CPS技术是怎么实现的?

    前言 微信搜[Java3y]关注这个有梦想的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创文 ...

  6. 爬虫练习之正则表达式爬取猫眼电影Top100

    #猫眼电影Top100import requests,re,timedef get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Window ...

  7. 二:Tomcat与登录

    在使用Tomcat部署服务器之前我们需要写一个页面登录的HTML文本 该文本如下 <!DOCTYPE html> <html> <head> <meta ch ...

  8. 【鸿蒙应用开发】使用确切位置布局(PositionLayout)实现登录页面

    上一节我们了解了PositionLayout(确切位置布局,我更倾向于称为绝对布局),虽然应用场景稀少.维护不方便,但是该有的示例还是不能少. UI图拆解及代码实现 这个界面我们是不是很熟悉,打开浏览 ...

  9. Jmeter 添加 计数器

    第一步: 添加 > 配置元件  > 计数器    如下图所示: 第二步: 设置递增值与引用名称 第三步:使用引用名称 第四步:执行脚本,查看结果

  10. C/C++编程日记:逻辑井字棋(圈叉)(用空格初始化)

    问题描述: 3*3的棋盘中,只要一条线上出现三个一样的棋子就获胜(玩家或电脑):如果棋盘已经放满还未出现三个棋子一条线则打成平手. 具体细节: 初始化棋盘(用空格初始化)     //初始化棋盘 vo ...