django为什么需要uwsgi和nginx的配合

前言

相信每一个第一次开始做django+nginx+uwsgi线上部署的朋友都感觉到这个相当的麻烦,各种设置,参数以及报错…
我在刚开始在阿里云centos服务器上做django的线上部署的时候,总有一个疑惑,我使用这句话不就可以运行django程序了么?

# nohup表示不间断,&表示后台执行,80为外部访问端口
nohup python manage.py runserver 0.0.0.0:80 &

好像已经完成了线上的部署,为什么还需要nginx和uwsgi来配合django呢?
答案其实很简单:性能不够,安全不够,效率不够
所以我们经常需要uwsgi配合nginx来部署一个web框架(django)。

web开发两大块

web开发的两大块,web服务器和web框架
1.web服务器作用:
1)解析请求报文,调用框架程序处理请求。
2)组织响应报文,返回内容给客户端。
2.web框架的作用:
1)路由分发(根据url找到对应的处理函数) 。
2)在处理函数中进行业务的处理。
服务器和客户端之间的连接靠web服务器来维持,web服务器接收到请求后,将请求以及相关的参数传递给web框架,由框架负责生成内容,并将生成的内容传递给web服务器。

django和nginx属于什么

nginx是web服务器,django是web框架
1.django

DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone
through security audits or performance tests. (And that’s how it’s
gonna stay. We’re in the business of making Web frameworks, not Web
servers, so improving this server to be able to handle a production
environment is outside the scope of Django.)

根据django的文档我们可以看到,django的作用只是一个框架,它不是服务器,也不会去关心一些安全问题、HTTP 的性能问题等。
所以我们需要更加专业的 HTTP 服务器。
2.nginx
用来接受客户端请求,建立连接,转发响应的程序。外部浏览器通过设定的url访问nginx,nginx接收到浏览器发送过来的http请求,再进行分析。
静态文件请求:会直接返回在nginx设置的静态文件目录下的浏览器请求的静态文件。
动态请求:那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,转化为wsgi可以接受的格式,并发给wsgi,wsgi 根据请求的要求去调用对应的应用程序的某个文件(某个函数)再进行处理,处理完成后wsgi将将其打包成uwsgi能够接收的格式,交给uwsgi,uwsgi接收后转发给nginx,nginx最终将返回值返回给浏览器。

WSGI,uWSGI,uwsgi是什么呢

1.WSGI
是一种协议不是任何包不是任何服务器,就和 TCP 协议一样。它定义了 Web 服务器和 Web 应用程序之前如何通信的规范。只要web服务器和web框架满足WSGI协议,它们就能相互搭配使用。
所以WSGI只是一个协议,一个约定,而不是python的模块、框架等具体的功能。
2.uWSGI
本身就是一个便携的 web 服务器,当然也可以做一个连接其他app的中间件,所以我们一般还是在它们前面档一个更加专业的 HTTP 服务器——nginx,也就是上文提到的。仅仅只使用uWSGI的会有性能不够,安全性不够的情况。nginx是经过长时间验证的一个更好的服务器。
3.uwsgi
也是一种协议,适用于uWSGI内部,使用二进制的方法与其他的模块进行通讯。

uwsgi+nginx部署django的好处

1.nginx处理静态资源更加优秀,比django和uwsgi更好。
2.nginx可以优化连接,均衡负载,一个uwsgi有时候是不够用的,当同时访问量达到几百可能就不太行了。
3.提高安全性,程序不能直接被浏览器访问到,而是通过nginx开放某个接口,uwsgi本身是内网接口(127.0.0.0.1),对nginx加上安全限制有利于保护程序。
等等…

参考

[1]https://www.kawabangga.com/posts/2941
[2]https://blog.csdn.net/CHENYAoo/article/details/83055108?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
[3]https://blog.csdn.net/weixin_43274829/article/details/85060214?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

你可能感兴趣的:(uwsgi,web,django,nginx,python,web)