django+nginx+uwsgi 项目部署
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项目工作流程
- 用户通过浏览器发出http请求到服务器。
- nginx负责接受外部http请求并进行解包,若请求是静态文件则根据设置好的静态文件路径返回对应内容。若请求是动态内容则将请求交给uWSGI服务器(nginx和uWSGI使用端口或socket通信)。
- uWSGI服务器收到请求后,根据wsgi协议解析并回调Django应用。
- Django应用则根据请求进行数据库增删查改和模版渲染等工作,然后再逆方向返回nginx。
- 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网站项目的代理服务器。
参考文献
django+nginx+uwsgi 项目部署的更多相关文章
- CentOS上部署Django+Nginx+Uwsgi环境
在CentOS上部署Django+Nginx+Uwsgi环境 奇谭 2016-09-01 评论 Linux python django nginx uwsgi VirtualEnv的作用:创建隔 ...
- ubuntu+Django + nginx + uwsgi 部署
ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...
- Linux - 搭建Web项目(Django + nginx + uwsgi)
工作中碰到需要使用Django + nginx + uwsgi 搭建项目环境 1. 搭建基本环境 需要有python环境,不多做说明 需要安装nginx,不多做说明 需要安装uwsgi: yum in ...
- Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器
Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...
- django+nginx+uwsgi_cent0s7.4 部署
django+nginx+uwsgi_cent0s7.4 部署 几条命令 # 查看是否有 uwsgi 相关的进程 ps -aux|grep "uwsgi" # 杀死有关 uwsgi ...
- Install Python+Django+Nginx+UWSGI
一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...
- 吴裕雄--天生自然Django框架开发笔记:Django Nginx+uwsgi 安装配置
Django Nginx+uwsgi 安装配置 使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,需要一个可以稳定而持续的服务器,比如 ...
- 阿里云安装Nginx+vue项目部署
阿里云安装Nginx+vue项目部署 nginx安装包下载 http://nginx.org/en/download.html nginx安装 首先先安装PCRE pcre-devel 和Zlib,因 ...
- CentOS 6.5下安装Python+Django+Nginx+uWSGI
1.安装Python31.1先安装zlib库及其他三方库安装uWSGI时需要使用zlib,否则执行python uwsgiconfig.py --build时会报ImportError,就是因为在安装 ...
随机推荐
- 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]
题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...
- maven 打包可运行jar包(转)
目录 1.前提 2.方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 3.方法二:使用maven-assembly-plugin插件打包 4.方法三 ...
- ExtJs之列表(grid)
--renderers渲染器 可以格式化该列显示的数据格式或者按照你自定义的脚本显示最终数据样子 先看下renderer: function()里的参数 renderer:function(value ...
- Codeforces Round #274 (Div. 2) Riding in a Lift(DP 前缀和)
Riding in a Lift time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 【JAVA】在线程里使用线程外的变量为什么一定要是final类型
这个情况真的碰到很多,开始的时候也很难理解,但是既然IDE提示要final那我就final咯,跑通就行管那么多呢.然而这并不是科学的学习方法,万一面试问你呢那不是倒了大霉. OK,看了一些
- POJ - 1835 宇航员(模拟题)
问题描述: 宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下图所示: 现对六个方向分别标 ...
- Redux 洋葱模型理解
下面的代码会输出: A middleware1 开始C middleware2 开始E middleware3 开始======= G =======F middleware3 结束D middlew ...
- run()和start()的区别
run没有启新的线程,start方法才会调用Thread的native的start0方法,start0会调用run方法,开启新的线程,博主这么做,不是多线程顺序执行,而是把业务阻塞在主线程里.请打印: ...
- 2.1(java编程思想笔记)位移操作
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
- CentOS 6.9下双网卡绑定单个IP地址及装网卡绑定到一个网桥(转)
说明:经过查阅,原来双网卡绑定一个IP的专业名词叫做bond,可以实现负载均衡:如果想要实现两张网卡绑定到一个网桥,基本思路是两张网卡设置同一个网桥是行不通的,但如果先实现bond,然后将bond绑定 ...