关于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以及其后面的东西。这就是这几者之间的关系。

最新文章

  1. Transaction (Process ID xxx) was deadlocked on lock
  2. 遗传算法在JobShop中的应用研究(part 5:解码)
  3. 谈谈设计模式~原型模式(Prototype)
  4. java.lang.NullPointerException 空指针异常
  5. [Html5]sessionStorage和localStorage的区别
  6. Liferay 6.2 改造系列之十:修改系统登录相关配置
  7. php实现调用微信上传照片然后保存至服务器与数据库
  8. 解锁windowsphone设备遇到的错误:检查Miscrosoft账户凭据、请重新注册 0x80004005 解决方案
  9. TCP/IP 相关总结
  10. WebClient.UploadValues Post中文乱码的解决方法
  11. centos 7 卸载 mariadb 安装mysql
  12. SignalR系列教程:服务器广播与主动数据推送
  13. 第2章 开始入手 —— 01 创建第一个 Android 应用程序
  14. 1131: [POI2008]Sta
  15. UVa 10934 Dropping water balloons:dp(递推)
  16. pandas 使用
  17. PCB特征阻抗计算
  18. spark踩坑——dataframe写入hbase连接异常
  19. JAVA 是否会发生内存泄露(转)
  20. Spring @Trasactionl 失效, JDK,CGLIB动态代理

热门文章

  1. 日常使用mobx的小技巧
  2. flex布局 (转)
  3. ASP.NET Core 6.0 添加 JWT 认证和授权
  4. Apache Hudi 如何加速传统的批处理模式?
  5. asp.net core MVC 添加静态文件
  6. 开发一款让我们慢慢变好的微信小程序
  7. 团队Arpha2
  8. 干货 | Keepalived高可用服务配置实例
  9. Docker系列教程02-操作Docker容器
  10. java.sql和javax.sql的区别