了解Django 框架的人都知道一件事情,要将Web Application 部署的服务器上,就需要gunicorn 或者 uwsgi 等工具。这些工具的背后就是WSGI。
WSGI 是 Web Server Gateway Interface 的缩写,是一种网关协议。WSGI 定义了 web server 跟 python web application 之间沟通的规范。
在传统的 web server 中,像是 Nginx, Apache 是无法执行 Python Web Application 的。所以要想运行Python版本的 Web Application,就要用到 WSGI Server。
从下图中,我们以 Django 搭配 gunicorn 为例,在 Django 中的 wsgi.py 文件里定义了一个 application 的变量,以使 gunicorn 能够调用 Django 程序。
WSGI 提供的是Web server 与 python web application 之间的访问规范,只要符合这项规范的任何一个 Web server,都能与符合规范的 Application 进行串接。这样就给开发人员提供了非常大的弹性,不用在担心 Web server 跟 Web Application 之间不相容。
另一方面也能将 Web Server 与 Web Application 在开发上切割开来。因为开发 Web server 的人需要去处理多个请求进到 server 状况,但是 Web Application(framework) 的开发者,就不需要处理这种事情,可以更专注在 framework 及业务逻辑的开发。