uwsgi+nginx+django,Python 使用uwsgi

  uwsgi+nginx+django,Python 使用uwsgi

  什么是WSGI?WSGI,全称Web Server Gateway Interface,或Python Web Server Gateway Interface,是Web服务器和Web应用程序或为Python语言定义的框架之间的一个简单通用的接口。自从WSGI被开发以来,类似的接口已经出现在许多其他语言中。

  WSGI的官方定义是Python Web服务器网关接口。从名字就可以看出来,这个东西是一个网关,也就是关口。网关的功能是协议之间的转换。

  WSGI是Web服务器和Web应用程序或应用程序框架之间的底层接口,旨在促进可移植Web应用程序开发的共同点。WSGI是基于现有的CGI标准设计的。

  很多框架都是WSGI server自带的,比如Flask、webpy、Django、CherryPy等等。当然表现不好。内置的web服务器更多的是出于测试目的。发布时,使用生产环境中的WSGI服务器或uwsgi配合nginx。

  也就是说,WSGI就像一座桥,一边连接着web服务器,另一边连接着用户的应用。但是这座桥的功能很弱,有时候需要其他的桥来帮助它。WSGI的角色如图所示:

  WSGI的角色有两个方面:服务器或网关方面和应用程序或应用程序框架方面。服务端调用应用端,提供环境信息和一个回调函数(提供给应用将消息头传递给服务端),接收Web内容作为返回值。

  所谓WSGI中间件,是同时实现API的两面,所以可以在WSGI服务和WSGI应用之间进行中介:从WSGI服务器的角度来看,中间件扮演的是应用的角色,从应用的角度来看,中间件扮演的是服务器的角色。“中间件”组件可以执行以下功能:

  重写环境变量后,请求消息根据目标URL被路由到不同的应用程序对象。允许多个应用程序或应用程序框架在一个进程中同时运行。通过在网络上转发请求和响应消息,实现负载平衡和远程处理。对内容进行后处理,比如应用XSLT样式表。WSGI的设计确实参考了Java servlet。

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

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

  看过上一节的WSGI同学都很清楚,这是一个通信协议。Uwsgi是一种类似wsgi的通信协议。UWSGI是一个Web服务器,它实现了两个协议:uwsgi和UWSGI。Uwsgi协议是uWSGI服务器拥有的协议,用于定义要传输的信息类型。每个uwsgi包的前4个字节是对要传输的信息类型的描述,这与wsgi是两回事。

  有了uWSGI为什么还要nginx?Nginx具有优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,可以达到良好的客户端响应。

  接下来,我们将看看uWSGI的安装、配置和使用。

  uWSGI的安装很简单:

  安装Pipuwsgi现在让我们试着运行Django。让我们首先在virtualenv中创建一个Django项目:

  [root @ nowa magic ~]# CD nowa magic _ venv

  [root @ nowa magic nowa magic _ venv]# source bin/activate

  (nowa magic _ venv)[root @ nowa magic nowa magic _ venv]# django-admin . py startprojectnowamagic _ pjvirtualenv路径和目录文件如下:

  Django项目的路径和目录文件如下:

  测试uwsgi以在您的服务器上编写test.py:

  # test.py

  定义应用程序(env,start_response):

  start_response(200 OK ,[(Content-Type , text/html)])

  返回 Hello World 我的test.py的路径是/root/nowa magic _ venv/nowa magic _ pj/test . py,执行以下命令:

  [root @ nowa magic ~]# CD nowa magic _ venv

  [root @ nowa magic nowa magic _ venv]# source bin/activate

  (nowa magic _ venv)[root @ nowa magic nowa magic _ venv]# uws gi-http:8001-wsgi-file/root/nowa magic _ venv/nowa magic _ pj/test . py访问网页3358115.28.0.89: 8000。

  测试你的姜戈项目前面我们用姜戈-行政。py立即开始项目创建了一个项目,现在我们用姜戈自带的网服务器看看我们的项目有没出问题。还是进入我们虚拟环境:

  [root @ nowa magic ~]# CD nowa magic _ venv

  [root @ nowa magic nowa magic _ venv]# source bin/activate

  (nowa magic _ venv)[root @ nowa magic nowa magic _ venv]# python 2.7/root/nowa magic _ venv/nowa magic _ pj/manage。py runserver 0。0 .0 .0:8002执行这个命令报错:没有名为姜戈.核心.管理的模块,原因应该是装了多个版本的计算机编程语言导致的。命令指定文件路径就行,丑是丑些了

  (nowa magic _ venv)[root @ nowa magic nowa magic _ venv]#/usr/local/bin/python 2.7/root/nowa magic _ venv/nowa magic _ pj/manage。py runserver 0。0 .0 .0:8002好的,启动姜戈自带的服务器了,我们再访问http://115.28.0.89:8002/,成功显示:

  说明姜戈项目也没问题。

  连接姜戈和方法最后一步了,我们要把方法与姜戈连接起来。

  编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下。我的放在/root/nowa magic _ venv/nowa magic _ pj/下:

  #!/usr/bin/env python

  #编码:utf-8

  导入操作系统

  导入系统

  # 将系统的编码设置为UTF8

  重新加载(系统)

  sys.setdefaultencoding(utf8 )

  OS。环境。设置默认值( DJANGO _ SETTINGS _ MODULE , nowamagic_pj.settings )

  从django.core.handlers.wsgi导入WSGIHandler

  application=WSGIHandler()注意不要直接复制,有个地方要改:注意到语句os.environ.setdefault。比如我的项目为nowamagic_pj,则语句应该是OS。环境。设置默认值( DJANGO _ SETTINGS _ MODULE , nowamagic_pj.settings )

  好吧,进入虚拟环境执行指令:

  [root @ nowa magic ~]# CD nowa magic _ venv

  [root @ nowa magic nowa magic _ venv]# source bin/activate

  (nowa magic _ venv)[root @ nowa magic nowa magic _ venv]# uws gi-http:8000-chdir/root/nowa magic _ venv/nowa magic _ pj/-module django _ wsgi成功显示姜戈,成功了页面。

  这样,你就可以在浏览器中访问你的姜戈程序了。所有的请求都是经过方法传递给姜戈程序的。

  这里我们介绍了如何把方法与姜戈连接起来,在下一篇将继续介绍如何将方法与Nginx连接。

  上一篇介绍了uWSGI来部署姜戈程序,但在在生产环境中单单只有uWSGI是不够的,Nginx是必不可少的工具。

  先安装Nginx,可以参照前面的小节:使用每分钟转数安装Nginx。

  Nginx配置在nginx.conf上加入/修改,我的计算机网络服务器配置如下(一切从简……):

  服务器{

  听80;

  服务器名115.28.0.89;

  #服务器名称本地主机;

  access _ log/home/nowa magic/logs/access。日志;

  error _ log/home/nowa magic/logs/error。日志;

  # root/root/nowa magic _ venv/nowa magic _ pj;

  位置/{

  华盛顿大学SGI _ pass 127。0 .0 .1:8077;

  #包含uwsgi _ params

  包括/etc/nginx/uws gi _ params;

  # uws gi _ pass 127。0 .0 .1:8077;

  #uwsgi_param UWSGI_SCRIPT索引;

  # uw SGI _ param uw SGI _ py home $ document _ root;

  # uw SGI _ param uw SGI _ CHDIR $ document _ root;

  }

  访问_注销

  }注意保证配置里写的目录/home/nowamagic/logs/和/home/nowamagic/logs/存在,接下来就没啥问题了,Nginx配置很简单。

  uWSGI配置前面我们是直接使用命令行来启动uWSGI,在实际部署环境中,我们常用的是配置文件的方式,而非命令行的方式。

  我的姜戈程序目录:/root/nowa magic _ venv/nowa magic _ pj/

  这里让Nginx采用8077 端口与uWSGI通讯,请确保此端口没有被其它程序采用。

  uWSGI支持多种配置文件格式,比如xml、ini、json等等都可以。

  1.可扩展标记语言配置

  请确定你在上一节中的django_wsgi.py文件已经存在了。新建一个可扩展置标语言文件:nowamagic_pj.xml,将它放在/root/nowa magic _ venv/nowa magic _ pj目录下

  方法

  插座127 .0 .0 .1:8077/插座

  听80/听

  主真/主

  python路径/root/nowa magic _ venv/nowa magic _ pj/python路径

  流程1/流程

  日志日期真实/日志日期

  daemonize/var/log/uws gi。日志/后台化

  插件python/插件

  /uwsgi然后执行命令:

  uw SGI-x/root/nowa magic _ venv/nowa magic _ pj/nowa magic _ pj . XML

  或者

  /usr/local/bin/uws gi-x/root/nowa magic _ venv/nowa magic _ pj/nowa magic _ pj . xml加载指定的XML配置文件。使用命令行参数时,可以使用简化的命令“-x”。当然,也可以缩写成:

  UWSGI-xml/etc/nowamagic.xml,即使命令行的最后一个参数以“.”结尾。xml”,这意味着XML文件将作为配置加载。

  Uwsgi /etc/nowamagic.xml有时,由于各种环境问题,无法识别-x-XML命令。您可以使用以下ini配置方法:

  2.ini配置

  [uwsgi]

  vhost=false

  插件=python

  插座=127.0.0.1:8077

  主=真

  启用-线程=真

  工人=1

  wsgi-file=/root/nowa magic _ venv/nowa magic _ pj/nowa magic _ pj/wsgi . py

  virtualenv=/root/nowa magic _ venv

  chdir=/root/nowa magic _ venv/nowa magic _ pj,然后执行命令:

  uws gi-ini/root/nowa magic _ venv/nowa magic _ pj . ini uws gi就这样开始了。如果不出意外,你可以在线访问你的Python项目。

  插曲我配置Nginx和uWSGI后,访问时显示502错误。查看uWSGI启动信息,发现了这个:ImportError:没有名为django.core.wsgi的模块。

  然后,推断我的CentOS上的Python版本是2.4.3,然后进入virtualenv并执行:

  大蟒

  进口django

  从django.core.wsgi导入get _ wsgi _ application没有报错,因为我的虚拟环境中的Python版本是2.7.5。推论是对的,但是虚拟环境中的Django会默认调用外部环境中的Python。解决方案:pip在虚拟环境中安装django。

  好了,问题解决了,一切正常。

  附上一些我在配置中用过的命令,这样就不用搜索了:

  1.关闭uWSGI:

  killall -9 uwsgi

  killall -s HUP /var/www/uwsgi

  杀死所有-s hup/usr/local/bin/uwsgi2。列出端口占用率:

  netstat -lpnt

  涉及

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • nginx配置访问图片,nginx配置图片服务器
  • nginx配置访问图片,nginx配置图片服务器,Nginx搭建图片视频服务器的部署步骤
  • nginx负载均衡配置详解linux,nginx负载均衡服务器对性能有要求吗
  • nginx负载均衡配置详解linux,nginx负载均衡服务器对性能有要求吗,详解Nginx服务器之负载均衡策略(6种)
  • nginx正向代理与反向代理详解区别,nginx的正向代理和反向代理
  • nginx正向代理与反向代理详解区别,nginx的正向代理和反向代理,nginx正向代理与反向代理详解
  • nginx日常优化有哪些,nginx日常优化有哪些
  • nginx日常优化有哪些,nginx日常优化有哪些,nginx优化的六点方法
  • nginx拦截,nginx 屏蔽IP
  • nginx拦截,nginx 屏蔽IP,Nginx服务器屏蔽与禁止屏蔽网络爬虫的方法
  • nginx实现负载均衡几种方式,nginx负载均衡配置详解linux
  • nginx实现负载均衡几种方式,nginx负载均衡配置详解linux,使用nginx进行负载均衡的搭建全过程
  • nginx安装及配置教程,Nginx怎么安装
  • nginx安装及配置教程,Nginx怎么安装,Nginx 安装详细教程
  • nginx基本原理,nginx实现原理
  • 留言与评论(共有 条评论)
       
    验证码: