Amazon EC2 上的许多 Django 应用程序部署使用 HTTP 服务器 NGINX 和 Gunicorn。
我想知道它们实际上做了什么以及为什么两者并行使用。并行运行它们的目的是什么?
它们不是并行使用的。NGINX 是一个反向代理。这是排在第一位的。它接受传入的连接并决定它们下一步应该去哪里。它还(通常)提供静态媒体,例如 CSS、JS 和图像。它还可以做其他事情,例如通过 SSL 加密、缓存等。
Gunicorn 是下一层,是一个应用服务器。NGINX 看到传入的连接是针对www.domain.com
并知道(通过配置文件)它应该将该连接传递给 Gunicorn。Gunicorn 是一个WSGI服务器,它基本上是:
Web 服务器和 Web 应用程序或框架之间的简单通用接口
Gunicorn 的工作是管理和运行 Django 实例(类似于django-admin runserver
在开发期间使用)
与此设置的对比是将 Apache 与mod_wsgi
模块一起使用。在这种情况下,应用服务器实际上是 Apache 的一部分,作为一个模块运行。
Nginx 和 Gunicorn 不并行使用。
下图显示了 nginx 和 Gunicorn 如何交互。