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用
 
 
 
 
posted @ 2022-01-05 22:18  tslam  阅读(1475)  评论(0编辑  收藏  举报