【发布时间】:2012-10-22 09:12:37
【问题描述】:
亚马逊 EC2 上的许多 Django 应用程序部署使用 HTTP 服务器 NGINX 和 Gunicorn。
我想知道它们实际上做了什么以及为什么两者并行使用。并行运行它们的目的是什么?
【问题讨论】:
-
参见this question,它比蒂米的回答更详细。
-
@BurhanKhalid 谢谢你,帮助了
亚马逊 EC2 上的许多 Django 应用程序部署使用 HTTP 服务器 NGINX 和 Gunicorn。
我想知道它们实际上做了什么以及为什么两者并行使用。并行运行它们的目的是什么?
【问题讨论】:
它们不是并行使用的。 NGINX 是一个 reverse proxy。这是排在第一位的。它接受传入的连接并决定它们下一步应该去哪里。它还(通常)提供静态媒体,例如 CSS、JS 和图像。它还可以做其他事情,例如通过 SSL 加密、缓存等。
Gunicorn 是下一层,是一个 application server。 NGINX 看到传入的连接是针对www.domain.com 的,并且知道(通过配置文件)它应该将该连接传递给 Gunicorn。 Gunicorn 是一个WSGI 服务器,基本上是一个:
Web 服务器和 Web 应用程序或框架之间的简单通用接口
Gunicorn 的工作是管理和运行 Django 实例(类似于在开发过程中使用django-admin runserver)
与此设置的对比是使用带有mod_wsgi 模块的Apache。在这种情况下,应用服务器实际上是 Apache 的一部分,作为一个模块运行。
【讨论】:
Nginx 和 Gunicorn 没有并行使用。
下图展示了 nginx 和 Gunicorn 的交互方式。
【讨论】: