软件 | 版本 |
---|---|
Nginx | 1.16.1 |
uWSGI | 2.0.18 |
Django | 2.2.4 |
centos | 7.6 |
python | 3.7.2 |
本文将从三个方面来讲述这个问题
Nginx, uWSGI, Django三者的关系
Web的简单发展史
-
最早期的时候, Web Server返回的都只是一些静态的Html页面. 用户通过浏览器向服务器发送请求, 服务器接收到请求后在指定的文件夹下找到相应的文件然后返还给浏览器.
-
后来, 静态页面已经满足不了人们的需求, 人们想和Web Server进行一些动态交互, 比如用户名密码的登录, 比如想知道某个网站的访问量是多少等等, 这些都不再是程序员事先写几个静态页面存储在Web Server中就可以实现的.
由于动态交互涉及一定的业务逻辑, 于是就产生了处理这些业务逻辑的代码程序. Web Server接收到Browser的请求后, Web Server会把这个请求转发到一个处理这个请求的程序, 程序处理完后把结果返还给Web Server, 再由Web Server返还给Browser.
比如一个登录功能, Browser将账号密码发送给Web Server后, Web Server将账号密码转发给一个处理程序, 这个处理程序会验证这个账号密码是否匹配, 然后把结果发送给服务器.
CGI (Common Gateway Interface) 通用网关接口, 就是最初专门用来为server生成动态页面的脚本程序 -
随着时代的进步, CGI的局限性渐渐体现了出来, 伸缩性不太好, 不安全, 没有提供一种结构化的方法去构造一个动态应用程序(向深入了解CGI缺点的同学可以自行查阅资料). 新旧更迭, Web应用时代终于在2005年左右到来. 许许多多的Web应用框架应运而生, Django就是其中之一. 根据这些框架可以很容易的构造出一个又一个web应用.
Web Server将接收到的请求都转发给Web应用, 由Web应用程序处理后再将结果返还.
而Web Server想要和Web应用之间进行通信, 就需要大家都遵守一个规范协议, 这就是WSGI (Web Server Gateway Interface) (WSGI是为python语言定义的, 也就是说Web应用的编写语言为python). 通俗地讲就好像一个韩国人和一个日本人要相互沟通, 就需要学一门共同的语言汉语, WSGI就是充当汉语的角色.
uWSGI, WSGI, uwsgi的区分
-
uWSGI: 一种服务器(和Nginx同类别),实现了WSGI协议、uwsgi协议、http协议等。它要