ngix uwsgi django组合建站

原创
2016-08-08 09:23:49 823浏览

由于最近要做一个创新项目,需要用到python web开发,于是研究了一下django这个很全能的python web框架。

为什么需要ngix呢?

首先说一下为什么需要这三者组合建站,只用django的话,不能做到负载均衡,比如需要请求一些静态资源,就需要django全部去处理,不能将请求合理分发,而ngix正好能解决这样的问题(似乎这个项目也不用怎么考虑负载均衡哈~~但是提高逼格总是必须的),ngix通过配置可以将一些动态请求发给django处理,而对于静请求则自己处理,另外如果网站上还要运行php页面,那么ngix绝对是一个很好的选择,将对php的请求分发给apache处理,ngix和apache通过socket端口通信,然后返回给客户端处理后的结果。

然后为什么又需要uwsgi呢?

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。然后uwsgi是实现了uwsgi和WSGI两种协议的Web服务器。简单点说就是运用uwsgi我们可以实现由uwsgi启动django,然后ngix通过端口与uwsgi通信,在这个过程中,gjango实现了wsgi服务器的功能,ngix实现了wsgi客户端的功能,只不过在web里面,ngix扮演的又是服务器(计算机中的软件通信有很多都是客户端服务器模式。如文件资源就是一个服务,然后应用程序实现了了相应的协议从而去调用这个服务)。这样就实现了uwsgi在ngix和django的中转。

为什么不让ngix直接与django通信呢?

uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍那么快。
缉粻光救叱嚼癸楔含盲uWSGI的主要特点如下:
◆超快的性能。
◆低内存占用(实测为apache2的mod_wsgi的一半左右)。
◆多app管理。
◆详尽的日志功能(可以用来分析app性能和瓶颈)。
◆高度可定制(内存大小限制,服务一定次数后重启等)。

这三者之间的原理如下,

the web client  the web server(nginx)  the socket  uwsgi  Django

开始部署

1.安装ngix sudo apt-get install ngix

由于我的机器上面还有apache,我需要修改ngix的监听端口为8080

修改如下

server {
	listen 8080 default_server;
	listen [::]:8080 default_server ipv6

	root /var/ngix;  #将根目录改为/var/ngix
	index index.html index.htm;
}

2.安装django

用python自带的包管理器easy_install安装 easy_install django会自动安装最新版本

3.安装uwsgi

apt-get install python-dev #不安装这个,下面的安装可能会失败
pip install uwsgi
如果是apt-get安装就需要     sudo apt-get install uwsgi-plugin-python
工具安装好以后就可以开始配置项目了,我用的开发环境是pycharm,可以自动生成django项目,如果不是需要运行django的admin.py生成相应的项目文件下面是我的项目的结构

.
└── myproject
├── app
│ ├── admin.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── myproject
│ ├── django.xml
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── templates
└── test.py
django.xml文件内容为:

127.0.0.1:8630/var/ngix/myproject/myproject..wsgi
这里需要注意的是wsgi模块,网上很多都是错误的,直接用自动生成的就行。
用socket和ngix进行通信,端口号为本机的8630端口

然后需要在ngix的配置文件中添加

location / {
		include uwsgi_params;
		uwsgi_pass 127.0.0.1:8630;
}
uwsgi是ngix自带的模块

重启ngix服务,然后启动uwsgi服务

$ uwsgi -x django.xml --plugin python

需要在django.xml所在目录执行

最后在浏览器输入127.0.0.1:8080就可以看见django的调试页面了~~

折腾了一天,大功告成

总结一下学到的其他东西:删除/etc/dpkg/info/下面对应的安装文件,可以解决apt子进程启动出错的问题。删了以后需要autoremove一下

最后,分布式真是个大坑!!!!!!!!

资料分享:wsgi概念 uwsgi概念 基于nginx和uWSGI在Ubuntu上部署Django

如何把uwsgi交给supervisor管理 unavailable-modifier-requested-0解决办法

uwsgi手册 uwsgi部署django常见问题汇总 django中文教程 还是建议去看英文教程,完整点

如上便是我参考的资料

以上就介绍了ngix uwsgi django组合建站,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。