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的一部分,作为模块运行。