在之前的几篇博客中对Django的功能做了初步实践,这里链接贴一下:

Django的安装和启动

Django之--网页展示Hello World!

Django之--通过MVC架构的html模板展示Hello World!

Django之--MVC的Model

Django之--POST方法处理表单请求

Django之--模板加载图片

到这里基本的测试暂时告一段落,但是在实际开发中是不可能用python manage.py runserver这种方式启动web server的,因此接下来测试如何使用uwsgi+nginx的方式启动Django。

一、安装uWSGI和Nginx

pip3.6 install uwsgi
yum -y install nginx

WSGI / uwsgi / uWSGI 这三个概念的区别:(引用自:http://www.cnblogs.com/alex3714/p/6538374.html

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。 
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。 
而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。 
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

二、为uWSGI编写配置文件

vi /etc/uwsgi.ini

[uwsgi]
chdir=/root/Django/mysite/ --即网站根目录。
module=mysite.wsgi:application --标识app位置。
static-map=/static=/root/Django/mysite/static --表示模板引用的静态文件的目录,使用图片时必须设置。
socket=192.168.1.193:8000 --用于接收nginx请求的socket,可以是文件,而且建议是文件,这里懒的改了。
master = true
vhost = true
no-site = true
workers = 2
reload-mercy = 10
vacuum = true
max-requests = 1000
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi.pid
daemonize = /tmp/uwsgi.log --uWSGI日志,安装uwsgi调试时有用。

三、修改Nginx配置文件

upstream部分一般用于配置负载均衡,这里就不写了。

server {
listen 80 default_server; --表示监听80端口,我们最后也通过访问此端口来访问网站的。
listen [::]:80 default_server;
server_name 192.168.1.193; #定义server访问名,表示只处理此访问名的请求,如果不设置会默认当前第一个server域,因此不设置也行。
access_log /etc/nginx/access.log main; #nginx日志
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { #默认请求访问
include /etc/nginx/uwsgi_params;
uwsgi_pass 192.168.1.193:8000; #请求自动转发给192.168.1.193:8000的uWSGI socket,与上面uWSGI的socket参数要一致。
index index.html index.htm;
client_max_body_size 35m;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

四、运行uWSGI和nginx

启动uwsgi和nginx:

uwsgi --ini=/etc/uwsgi.ini
service nginx start

此时你就可以通过你在urls.py定义的网址来访问页面了。但是需要注意的nginx上边我监听的是80端口,因此你只需要访问80端口就好,他会把请求全部转发到8000端口的uwsgi处理。

显示的页面如下图所示(默认的80端口):

最后:

必须要说的是不使用nginx只用uwsgi也可以实现以上的功能,但是此时你需要为uwsgi.ini配置http参数,socket参数可以省略,如果只使用uwsgi那么你可以通过http参数定义的端口访问以上页面。使用nginx的最大好处之一是实现对后端uwsgi的负载均衡,这样可以提升并发量,此外nginx对静态请求的处理能力要强过uwsgi,因此如果静态请求较多,那么可以将这部分内容用nginx处理。

补充:

最近在用uwsgi+nginx设置https访问项目时遇到了uwsgi无法启动的问题,网上大多数回答都是要么没装django(我特么智障不装django来问问题??!!)要么用了virtualenv(确实没用这玩意儿),到最后还是在十多个stackoverflow的相似话题里找到了一个合胃口的,具体网页原谅我忘记了隐约记得是非前排的、32个赞的回答。

uwsgi日志报错如下:

*** Operational MODE: preforking ***
Traceback (most recent call last):
File "./mysite/wsgi.py", line 13, in <module>
from django.core.wsgi import get_wsgi_application
ModuleNotFoundError: No module named 'django'
unable to load app 0 (mountpoint='') (callable not found or import error)

我开始以为是系统默认python命令是python2的缘故,但是改为3也是不行,后来看到那位大佬的回复后隐约找到了这个问题应该是django和uwsgi的版本更新速度不协调的问题,这个不是我自己能解决的,暂时的解决办法就是在项目的主app下的wsgi.py文件里加上如下的语句(事实上你单独import sys,然后看sys.path是包含这个路径的,只是uwsgi不知道):

import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')

  

Nginx+uWSGI启动Django的更多相关文章

  1. nginx+uwsgi启动Django项目

    1.安装项目环境 系统环境:ubuntu16.04 python环境:python3.5.2 Django版本:django1.11.7 nginx环境:nginx_1.10.3 虚拟环境:virtu ...

  2. 填坑!!!virtualenv 中 nginx + uwsgi 部署 django

    一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...

  3. nginx + uwsgi 部署 Django+Vue项目

    nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...

  4. CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...

  5. 使用Nginx+uWSGI部署Django项目

    1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...

  6. nginx + uWSGI 为 django 提供高并发

    django 的并发能力真的是令人担忧,这里就使用 nginx + uwsgi 提供高并发 nginx 的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的 web 服务中更是突出其优越的地 ...

  7. Nginx+uWSGI+Python+Django构建必应高清壁纸站

    写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...

  8. uwsgi启动Django应用

    uwsgi启动Django应用   uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议. WSGI / uwsgi / uWSGI 三者区别: WSGI是一种通信协议,Fl ...

  9. 部署 Nginx +uwsgi+centos7+django+supervisor 项目

    部署CRM项目 前言 使用软件 nginx 使用nginx是为了它的反向代理功能,项目会通过Django+uWSGI+Nginx进行服务器线上部署. uWSGI python web服务器开发使用WS ...

随机推荐

  1. String补充

    String类不可变和可变字符序列区别_字符串比较 String类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”.也就是指对象内部成员变量的值无法再改变, p ...

  2. Java基础--Eclipse使用

    Eclipse是JavaWeb开发最常用的工具,下面详细介绍一下如何下载安装最新版Eclipse.本文eclipse的使用是在JDK安装配置完成的基础上进行的,否则Eclipse安装后可能无法运行程序 ...

  3. mysql tablespace(独立表空间)超速备份大数据

    前序 对于用户自主创建的表,会采用此种模式,每个表由一个独立的表空间进行管理备份(速度相当的猛) 首先介绍一下文件 .ibd就被称之为独立表空间的数据文件 .frm就是元数据文件 就是创建表后生成的 ...

  4. Java 8中用法优雅的Stream,性能也"优雅"吗?

    之前的文章中我们介绍了Java 8中Stream相关的API,我们提到Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码. 那么,Stream API的性能到 ...

  5. 快速搭建WebAPI(Odata+Code-First)附Odata条件查询表~

    Odata是什么? 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准.该标准由微软发起,前三个版本1.0.2.0.3.0都 ...

  6. Zara精讲C#.Cache、它和Redis区别是什么???

    前言:今天在博客园看到大佬在用Cache,非常不懂,原来它是搞缓存的,原来我只知道Redis是搞这个的,才知道有这个玩腻. 那它们的区别是什么呢?? 区别: redis是分布式缓存,是将数据随机分配到 ...

  7. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  8. linux下sh脚本/bin/bash^M问题解决

    如果是在windows下编辑的脚本,到了linux下运行时会报出这样的错误/bin/bash^M:bad interpreter: No such file or directory这时因为编码的问题 ...

  9. pycharm安装破解go插件

    pycharm 2018以前版本安装go插件可以直接在plugins中搜索 go 插件,然后安装.若是2018以后的版本,go 变成了收费插件,plugins 搜不到.然后Google了一下,有人提供 ...

  10. React Fiber 数据结构揭秘

    此章节会通过两个 demo 来展示 Stack Reconciler 以及 Fiber Reconciler 的数据结构. 个人博客 首先用代码表示上图节点间的关系.比如 a1 节点下有 b1.b2. ...