Django虽然自带一个Server,但只能作为开发时测试使用,我们需要一个可以稳定而持续的服务器对网站进行部署,比如Apache, Nginx, lighttpd等,本篇将利用nginx和uWSGI部署Django网站项目。

前言

nginx简介

  nginx是一个HTTP服务器,也是一个反向代理服务器,由基础模块、核心模块、第三方模块构成,与Apache相比更轻量级,占用更少的内存及资源。

WSGI/uWSGI/uwsgi区别

WSGI(Python Web Server GateWay Interface): WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。由于WSGI的通用性,出现了独立的WSGI程序,例如uWSGI和Apacke的mod_wsgi。

uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。

uwsgi: 是uWSGI服务器实现的独有的协议。

nginx/uWSGI/Django项目工作流程

  1. 用户通过浏览器发出http请求到服务器。
  2. nginx负责接受外部http请求并进行解包,若请求是静态文件则根据设置好的静态文件路径返回对应内容。若请求是动态内容则将请求交给uWSGI服务器(nginx和uWSGI使用端口或socket通信)。
  3. uWSGI服务器收到请求后,根据wsgi协议解析并回调Django应用。
  4. Django应用则根据请求进行数据库增删查改和模版渲染等工作,然后再逆方向返回nginx。
  5. nginx将响应交付用户浏览器。

服务器Django+uWSGI+nginx配置(上)

  前面4.1小结,我们利用在/var/www/下git clone了一个空仓库,假设名为”com.test.blog“,实际上是一个进行了git初始化的空文件夹。

创建项目虚环境

    $ sudo -s                       // 获得root权限
$ cd /var/www/com.test.blog // 进入项目文件夹
$ virtualenv env --python=python2.7 \
--no-site-packages // 创建名为env的python空环境

  如果产生如下报错,说明服务器语言未设置。

locale.Error: unsupported locale setting

  则先执行

    $ export LC_ALL=C

  后再次执行上述命令。

Django部分

安装Django

  启用env环境。

    $ source env/bin/activate       // 启用环境

  安装支持python2.7的Django 1.11。

    $ pip install Django==1.11
$ django-admin --version

创建一个Django默认项目用于测试

    $ django-admin startproject test_nginx
// 创建名为“test_nginx”的Django项目

  Django会用模板创建一个名为“test_nginx”的默认项目。

测试Django服务器

  利用Django自带的测试服务器来直接处理客户端的http访问请求,测试Django能否正常工作。

  注意,首先要修改settings.py配置文件,添加ALLOWED_HOSTS,否则会报错。
  进入./test_nginx/test_nginx,利用vim修改settings.py中的“ALLOWED_HOSTS”。

    ...

        ALLOWED_HOSTS = ['*']   // 允许所有地址

    ...

  这样可以在本地直接利用服务器ip和端口访问网页了。
  
  运行Django Server(Ctrl + C 结束运行)。

    $ pwd           // 当前路径
/var/www/com.test.blog/test_nginx
$ python manage.py runserver 0.0.0.0:8000
// 8000端口,启用Django服务器

  本地浏览器输入”服务器IP:8000”,显示

uWSGI部分

安装uWSGI

  在env虚拟环境下使用pip安装。

    $ pip install uwsgi
$ uwsgi --version // 显示uwsgi安装版本

测试uWSGI服务器

  新建test.py文件,内容如下:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World from uWSGI"

  终端运行:

    $ uwsgi --http :8000 --wsgi-file test.py
  • 1

  本地浏览器刷新页面,显示

uWSGI+Django测试

  利用uWSGI作为服务器处理http请求,并通过wsgi传递给Django模块。


  终端运行:

    $ pwd
/var/www/com.test.blog/test_nginx
$ uwsgi --http :8000 --module test_nginx.wsgi

  本地浏览器刷新页面,显示

nginx部分

安装nginx

    $ sudo apt install nginx

nginx常用命令

启动nginx服务器

    $ sudo service nginx start

停止nginx服务器

    $ sudo service nginx stop

查看nginx服务的状态

    $ sudo service nginx status

重启nginx服务器

    $ service nginx restart

测试nginx服务器状态

  启动nginx服务器后,本地浏览器输入”服务器IP:80”,如下图显示说明nginx工作正常。
  

结语

  服务器端nginx,uWSGI和Django彼此之间已经可以独立工作,下半篇将修改配置文件,真正使nginx作为Django网站项目的代理服务器。

参考文献

  1. WSGI,uwsgi和uWSGI的区别
  2. 使用uWSGI和nginx来设置Django和你的web服务器

django+nginx+uwsgi 项目部署的更多相关文章

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

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

  2. ubuntu+Django + nginx + uwsgi 部署

    ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...

  3. Linux - 搭建Web项目(Django + nginx + uwsgi)

    工作中碰到需要使用Django + nginx + uwsgi 搭建项目环境 1. 搭建基本环境 需要有python环境,不多做说明 需要安装nginx,不多做说明 需要安装uwsgi: yum in ...

  4. Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...

  5. django+nginx+uwsgi_cent0s7.4 部署

    django+nginx+uwsgi_cent0s7.4 部署 几条命令 # 查看是否有 uwsgi 相关的进程 ps -aux|grep "uwsgi" # 杀死有关 uwsgi ...

  6. Install Python+Django+Nginx+UWSGI

    一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...

  7. 吴裕雄--天生自然Django框架开发笔记:Django Nginx+uwsgi 安装配置

    Django Nginx+uwsgi 安装配置 使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,需要一个可以稳定而持续的服务器,比如 ...

  8. 阿里云安装Nginx+vue项目部署

    阿里云安装Nginx+vue项目部署 nginx安装包下载 http://nginx.org/en/download.html nginx安装 首先先安装PCRE pcre-devel 和Zlib,因 ...

  9. CentOS 6.5下安装Python+Django+Nginx+uWSGI

    1.安装Python31.1先安装zlib库及其他三方库安装uWSGI时需要使用zlib,否则执行python uwsgiconfig.py --build时会报ImportError,就是因为在安装 ...

随机推荐

  1. TarjanLCA学习笔记

    1.前言 首先我们介绍的算法是LCA问题中的离线算法-Tarjan算法,该算法采用DFS+并查集,再看此算法之前首先你得知道并查集(尽管我相信你如果知道这个的话肯定是知道并查集的),Tarjan算法的 ...

  2. android viewpager fragment 优化 切换界面 延时加载

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 使用 碎片的 设置用户可见暗示visible hint  这个方法来做到. hint 是 ...

  3. HDU 2255 奔小康赚大钱(KM算法)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2255 [题目大意] 求最大匹配 [题解] KM模板 [代码] #include <cstdi ...

  4. 【数论】【莫比乌斯反演】【线性筛】bzoj2005 [Noi2010]能量采集

    http://blog.csdn.net/Clove_unique/article/details/51089272 Key:1.连接平面上某个整点(a,b)到原点的线段上有gcd(a,b)个整点. ...

  5. 【数论】【扩展欧几里得】hdu3579 Hello Kiki

    解一元线性同余方程组(模数不互质) 结合看这俩blog讲得不错 http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/qq_27 ...

  6. 【数论】nefu119 组合素数

    算组合数中的素因子p的个数,基本同这题 http://www.cnblogs.com/autsky-jadek/p/6592194.html #include<cstdio> using ...

  7. [转]JSP中常见的Tomcat报错错误解析(二)

    jsp常见错误代码文章分类:Java编程 jsp常见错误代码你用的是weblogic还是tomcat服务器.?出现404和500错误是初学jsp的朋友经常遇到的问题. IIS状态代码的含义 概要 当用 ...

  8. CDOJ 1279 班委选举 每周一题 div2 暴力

    班委选举 题目连接: http://acm.uestc.edu.cn/#/status/list?problemId=1279 Description 高考的脚步越来越近了--时间如山涧小溪一般悄无声 ...

  9. Fork & vfork & clone (转载)

    转自:http://blog.csdn.net/zqy2000zqy/archive/2006/09/04/1176924.aspx 进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合, ...

  10. Notepad++ v5.5以上 惯用法教程

    注:本文中为注明为自定义快捷键的,均为notepad++的默认快捷键. 0.  关闭标签页 UltraEdit是双击窗口就可以关闭,Notepad++双击不能关闭,右键只能关闭非当前标签页,那怎么办呢 ...