Nginx如何实现"处理动态请求"?


概念介绍   Django
  • 定义
    • python写的Web应用程序框架
  • 使用它可以快速开发
    • web应用程序
    • 开发网站
      • 优点: 高效(如自带注册登陆模块等)
  uWSGI
  • 定义
    • 是web服务器
    • 是实现了uwsgi和WSGI两种协议的Web服务器
  • 其他
    • WSGI是一种通信协议
    • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信
  8000端口     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 是项目目录,其实就是 网站的根目录 4-2 [root@web01 opt]# cd linux [root@web01 opt]# django-admin startapp app01 4-3 更改项目配置文件 [root@web01 linux]# vim linux/settings.py 更改内容 ALLOWED_HOSTS = ['*'] DATABASES = {} 更改1 更改2 4-4 # Django服务测试 4-4-1 [root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000 4-4-2 # 在浏览器输入  http://主机ip:8000/ 出现正常页面表示DJango服务正常启动   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 这里是相对路径 其他 # master进程是监控worker进程的 # 工作进程即worker进程最大数目(一般4或5个够了) 最后出现   5-2 启动uWSGI [root@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666 注: 在这之前需要创建uid是666的用户(已有请忽略) 参数 -d       : 以守护进程方式运行(后台运行) --ini : 指定配置文件路径 --uid : 指定uid   5-3访问(输入ip及端口)     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 是 项目配置文件中的"项目目录" 网络转发到xxx协议(转发到http协议server非本配置内容,仅为参考理解) 6-2 测试语法格式 nginx -t 6-3 解析域名(Nginx配置文件中) 填写路径  C:\Windows\System32\drivers\etc 填写内容: ip 域名 6-4 重启Nginx(为重载Nginx配置文件) systemctl restart nginx   6-5 访问网站 可以访问(仅启uWSGI服务,无启动python)       补充: 在本部署中 fastcgi_params 给php用 scgi_params 给java用 v2_params 给Go用