概念介绍

 

Django

  • 定义
  • python写的Web应用程序框架
  • 使用它可以快速开发
  • web应用程序

  • 开发网站

    • 优点: 高效(如自带注册登陆模块等)

 

uWSGI

  • 定义
  • 是web服务器
  • 是实现了uwsgi和WSGI两种协议的Web服务器
  • 其他
  • WSGI是一种通信协议

  • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信

 

8000端口

nginx 动态解析 html nginx处理动态网页_Nginx

 

 

Nginx是如何处理动态请求?

        简单来说:  通过Nginx+uWSGI+Django组合(框架)

 

        答: 首先Nginx服务是不能处理动态请求的;当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx从磁盘中找见文件则直接传给客户端,如果是动态请求Nginx则通过uwsgi协议转发到uWSGI服务器,uWSGi再去调python写web应用程序,处理的结果先给uWSGI服务器,再通过uwsgi协议转发到Nginx服务器

        这个过程中: Nginx服务器相当于动态文件/动态请求的代理者

        Nginx服务器不支持wsgi协议,无法直接调用python用语言开发的webApp;而uWSGI服务器支持wsgi协议

  • 静态请求:请求的内容是静态文件就是静态请求
  • 静态文件:文件上传到服务器,不会被修改,也就是永远不会改变的文件
  • html就是一个标准的静态文件
  • 动态请求:请求的内容是动态的(如每个人访问京东后加入购物车的内容都不一样)
  • 动态资源: 服务器上没该资源, 通过数据库或者其他服务处理后的数据

 

参考理解

uWSGI 来部署 Django 程序(如何把uwsgi与Django连接起来)

        你就可以在浏览器中访问你的Django程序了。所有的请求都是经过uwsgi传递给Django程序;

 

 

部署以实现"Nginx处理动态请求"

 


概要


1、创建用户

2、安装依赖软件(起码Django软件需要)

3、安装Django和uwsgi(不要一起装,会出问题)

4、创建Django服务 

5、部署并启动uWSGI服务

6、用Nginx将TCP服务转换成http服务(将uwsgi与Nginx连接)

 

 

详细

 

1、创建用户

[root@web01 opt]# groupadd django -g 888

[root@web01 opt]# useradd django -u 888 -g 888 -r -M -s /bin/sh

 

2、安装依赖软件(起码Django软件需要)

[root@web01 opt]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y

 

3、安装Django和uwsgi(不要一起装,会出问题)

[root@web01 opt]# pip3 install django

[root@web01 opt]# pip3 install uwsgi

 

 

4、创建Django服务 

4-1 创建项目(本例中叫Linux项目)

[root@web01 opt]# cd /opt

[root@web01 opt]# django-admin startproject linux

注:  /opt/linux 是项目目录,其实就是 网站的根目录

nginx 动态解析 html nginx处理动态网页_服务器_02

4-2

[root@web01 opt]# cd linux

[root@web01 opt]# django-admin startapp app01

nginx 动态解析 html nginx处理动态网页_nginx 动态解析 html_03

4-3

更改项目配置文件

[root@web01 linux]# vim linux/settings.py

更改内容

ALLOWED_HOSTS = ['*']

DATABASES = {}

更改1

nginx 动态解析 html nginx处理动态网页_服务器_04

更改2

nginx 动态解析 html nginx处理动态网页_linux_05

4-4

# Django服务测试

4-4-1

[root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000

nginx 动态解析 html nginx处理动态网页_linux_06

4-4-2

# 在浏览器输入  http://主机ip:8000/

出现正常页面表示DJango服务正常启动

nginx 动态解析 html nginx处理动态网页_linux_07

 

5、部署并启动uWSGI服务

 

缘由

python问题: 多线程性能差; 短时间遇到大流量,服务的承载能力不强

为了DJango的稳定性所以提供了uWSGI服务

    - uWSGI:  用C语言开发,是所有语言中最快的一种语言

操作

启动uWSGI服务后,不需要启动4-4-1的# python3 manage.py runserver 0.0.0.0:8000服务,uWSGI直接调python写的代码

 

 

 

5-1编辑项目配置文件

[root@localhost ~]# vim /opt/linux/myweb_uwsgi.ini

注:  配置文件建在网站根目录下 :  /opt/linux 是项目目录,其实就是 网站的根目录

配置内容

[uwsgi]

# 端口号

socket            = :8000

# 指定项目的目录

chdir           = /opt/linux

# wsgi文件路径

wsgi-file       = linux/wsgi.py

# 模块wsgi路径

module          = linux.wsgi

# 是否开启master进程

master          = true

# 工作进程的最大数目

processes       = 4

# 结束后是否清理文件

vacuum          = true

 

# wsgi文件路径

wsgi-file       = linux/wsgi.py 这里是相对路径

nginx 动态解析 html nginx处理动态网页_Nginx_08

其他

# master进程是监控worker进程的

# 工作进程即worker进程最大数目(一般4或5个够了)

最后出现

nginx 动态解析 html nginx处理动态网页_nginx 动态解析 html_09

 

5-2 启动uWSGI

[root@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666

注: 在这之前需要创建uid是666的用户(已有请忽略)

参数

-d       : 以守护进程方式运行(后台运行)

--ini : 指定配置文件路径

--uid : 指定uid

nginx 动态解析 html nginx处理动态网页_linux_10

 

5-3访问(输入ip及端口)

nginx 动态解析 html nginx处理动态网页_nginx 动态解析 html_11

 

 

6、 用Nginx将TCP服务转换成http服务(将uwsgi与Nginx连接)

      请求先给Nginx,Nginx则通过uwsgi协议转发到uWSGI服务器

        

 

6-1 编辑Nginx配置文件

配置内容部分解释

uwsgi_pass 127.0.0.1:8000;  8000是是 项目配置文件中的"端口号"

uwsgi_param UWSGI_SCRIPT linux.wsgi; linux.wsgi 是 项目配置文件中的"模块wsgi路径"

uwsgi_param UWSGI_CHDIR /opt/linux; /opt/linux 是 项目配置文件中的"项目目录"

nginx 动态解析 html nginx处理动态网页_linux_12

网络转发到xxx协议(转发到http协议server非本配置内容,仅为参考理解)

nginx 动态解析 html nginx处理动态网页_linux_13

6-2 测试语法格式

nginx -t

6-3 解析域名(Nginx配置文件中)

填写路径  C:\Windows\System32\drivers\etc

填写内容: ip 域名

6-4 重启Nginx(为重载Nginx配置文件)

systemctl restart nginx

 

6-5 访问网站

可以访问(仅启uWSGI服务,无启动python)

nginx 动态解析 html nginx处理动态网页_nginx 动态解析 html_14

 

 

 

补充:

在本部署中

nginx 动态解析 html nginx处理动态网页_nginx 动态解析 html_15

fastcgi_params 给php用

scgi_params 给java用

v2_params 给Go用