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用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架