NGINX和Gunicorn并行运行的目的是什么?

亚马逊EC2上的很多Django应用程序部署使用HTTP服务器NGINX和Gunicorn。

我想知道他们实际上做了什么,为什么这两个是并行使用。 同时运行它们的目的是什么?

它们不是并行使用的。 NGINX是一个反向代理 。 这是第一个在线。 它接受传入的连接,并决定下一步应该去的地方。 它也(通常)服务静态媒体,如CSS,JS和图像。 它也可以做其他的事情,如通过SSLencryption,caching等。

Gunicorn是下一层,是一个应用程序服务器 。 NGINX认为传入的连接是www.domain.com并且知道(通过configuration文件)它应该把这个连接传送到Gunicorn。 Gunicorn是一个WSGI服务器,基本上是:

Web服务器和Web应用程序或框架之间简单而通用的接口

Gunicorn的工作是pipe理和运行Django实例(类似于在开发过程中使用django-admin runserver

与此设置的对比是使用Apache与mod_wsgi模块。 在这种情况下,应用程序服务器实际上是Apache的一部分,作为模块运行。