文章目录
一、nginx + uwsgi + django部署架构
Nginx接受来自客户端的Http请求发送给uWSGI,uWSGI处理请求并将关键信息传递给web应用(django,flask等),应用返回Response经由uWSGI发送给Nginx,Nginx再发送给客户端。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
1. 什么是WSGI
WSGI是一种 python专用 的web协议。
WSGI实质:WSGI是一种描述web服务器(如 nginx,uWSGI web服务器 )如何与 web框架 (如用Django、Flask框架写的程序)通信的规范、协议
WSGI定义了使用 python编写的web app(django)与web server(uWSGI)之间接口格式。
- 为什么需要web协议:
1)不同的框架有不同的开发方式,但是无论如何,开发出的 应用程序(django)都要和服务器 (nginx)程序配合 ,才能为用户提供服务。
2) 这样, 服务器程序(nginx) 就需要为不同的框架提供不同的支持,只有支持它的服务器才能被开发出的应用使用,显然这是不可行的。
3)web协议本质:就是定义了 Web服务器和Web应用程序或框架之间的一种简单而通用的接口规范。
WSGI基本上是python应用程序(Flask、Django等)和web服务器(UWSGI、Gunicorn等)之间的一个契约。这样做的好处是,您可以轻松地更改web服务器,因为您知道它们符合WSGI规范,正如PEP-333中所述,这实际上是目标之一。
Django 的主要部署平台是 WSGI,它是 Web 服务器和 Web 应用的 Python 标准。[https://docs.djangoproject.com/zh-hans/2.2/howto/deployment/wsgi/]
2. 什么是uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
传统的web服务器不理解或无法运行Python应用程序。这就是WSGI服务器出现的原因。
另一方面,Nginx支持反向代理来处理Python WSGI服务器的请求和返回响应。
在这种情况下,NGINX只作为反向代理工作,它接收请求并将它们代理到应用服务器,即UWSGI。
**因为nginx不支持WSGI规范。**从技术上讲,nginx可以实现WSGI规范,如果他们愿意的话,他们只是没有。既然如此,我们需要一个实现规范的web服务器,这就是uWSGI服务器的作用。
uWSGI是一个成熟的http服务器,它可以并且能够自己很好地工作。我