名词解析
WSGI
封装了处理HTTP响应、TCP连接等操作的接口。用户不需要自己实现接受HTTP请求、解析HTTP请求、发送HTTP响应等操作,不需要专注于HTTP规范等,可以专心编写Web业务。
werkzeug
flask自带WSGI工具包,可以搭建WSGI服务。但只用于开发,实际生产需要用更专业高效的Web服务器。
uWSGI
Web服务器。它实现了WSGI协议、uwsgi、http等协议,是一个全站式的托管服务,支持多种编程语言。
Nginx
高效的Web服务器和反向代理服务器,可以用于负载均衡。也支持uWSGI的uwsgi协议,所以可以将Nginx与uWSGI结合起来。
- 相较于Apache,Nginx支持高并发,部署简单,内存消耗少。但是Apache发展更久,模块更丰富,社区更大。
Nginx 以其高性能、稳定性、丰富的功能、简单的配置、低资源消耗而闻名。
Nginx 是一个可以为你的 Web 应用处理 HTTP 请求的服务器。对于典型的 Web 应用,Nginx 可以配置为 HTTP 请求进行以下操作:
- 将请求 反向代理 至上游服务器(例如 Gunicorn、uWsgi、Apache 等)。
- 为静态资源(Javascript 文件、CSS 文件、图像、文档、静态 HTML 文件)提供服务。
uWSGI与nginx的区别
uWSGI与Nginx同是Web服务器,但是Nginx对于处理静态文件更有优势、性能更好。表现在Nginx能进行负载均衡、HTTP缓存、高效处理高并发请求等等。所以把这两者结合起来使用,能够使服务器更稳定、高效。
在我们的模型中:
-
nginx是对外的服务器,外部浏览器通过url访问nginx,uwsgi是对内的服务器,主要用来处理动态请求。
-
nginx接收到浏览器发送过来的http请求,将包进行解析,分析url,
a.如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,
b.如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uWSGI。
所以抽象出来
用户 → nginx → uWSGI
图片取自https://www.jianshu.com/p/