关于nginx 和 uwsgi
2024-10-20 23:34:38
关于nginx和uWSGI和Django之间的关系,我觉得要理一下。
为什么要用nginx
因为我们要使用https协议访问。(y总说django不支持,但是我查了一下,django也可以支持https,但是需要安装另外的库。确实不如nginx方便,而且nginx还能提供其他的功能。)
uWSGI是什么
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
WSGI协议是Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。
所以简单来说uWSGI就是用来沟通nginx和django的一座桥梁。
为什么要nginx+uwsgi+diango这样来部署
首先他们的工作流程是这样的:nginx 是对外的服务接口,外部浏览器通过url访问nginx。nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi 发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
但是要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程。
那么nginx到底可以干嘛
- 安全:程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性的限制,可以达到保护程序的作用。
- 负载均衡:一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。
- 静态文件处理高效:用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。这就是这几者之间的关系。
最新文章
- Transaction (Process ID xxx) was deadlocked on lock
- 遗传算法在JobShop中的应用研究(part 5:解码)
- 谈谈设计模式~原型模式(Prototype)
- java.lang.NullPointerException 空指针异常
- [Html5]sessionStorage和localStorage的区别
- Liferay 6.2 改造系列之十:修改系统登录相关配置
- php实现调用微信上传照片然后保存至服务器与数据库
- 解锁windowsphone设备遇到的错误:检查Miscrosoft账户凭据、请重新注册 0x80004005 解决方案
- TCP/IP 相关总结
- WebClient.UploadValues Post中文乱码的解决方法
- centos 7 卸载 mariadb 安装mysql
- SignalR系列教程:服务器广播与主动数据推送
- 第2章 开始入手 —— 01 创建第一个 Android 应用程序
- 1131: [POI2008]Sta
- UVa 10934 Dropping water balloons:dp(递推)
- pandas 使用
- PCB特征阻抗计算
- spark踩坑——dataframe写入hbase连接异常
- JAVA 是否会发生内存泄露(转)
- Spring @Trasactionl 失效, JDK,CGLIB动态代理