nginx与uwsgi介绍
nginx是一款高性能的http服务器/反向代理服务器及电子邮件代理服务器
nginx应用场景
-
http服务器。nginx是一个http服务器可以独立提供http服务。可以做网页静态服务器。
-
虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
基于端口的,不同端口。
基于域名的,不同域名。
-
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕(dang)机而某台服务器闲置的情况。
uwsgi概念
uwsgi实现了wsgi的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器
nginx uwsig wsgi django 这些究竟是什么关系?
-
首先nginx是都对外的服务接口,外部浏览器通过url访问nainx。
-
nginx接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件。
如果不是静态文件,而是一个动态的请求,那么nginx就将请求发个uwsgi,uwsgi接收到请求后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
-
要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程,但是要考虑到某种情况。
-
安全问题,程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性的限制,可以达到保护程序的作用。
-
负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。
-
静态文件问题,用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接有nginx完成,静态文件的访问完全不去经过uwsgi以及后面的东西。