20

这是一个初学者问题,但我无法理解 Gunicorn 和 Nginx 之间的抽象。我不是在寻找详细的答案,只是在高层次上,每个角色扮演什么角色?他们如何互动?

4

2 回答 2

11

根据Gunicorn 的部署文档,我的理解是您使用 Nginx 作为 Gunicorn 的代理服务器。

由于 Gunicorn 是从Ruby 的 Unicorn移植的,我假设 Unicorn 的限制和规范也适用于 Gunicorn:

Unicorn 是用于 Rack 应用程序的 HTTP 服务器,旨在仅在低延迟、高带宽连接上为快速客户端提供服务,并利用 Unix/类 Unix 内核中的功能。只能通过在 Unicorn 和慢速客户端之间放置能够完全缓冲请求和响应的反向代理来为慢速客户端提供服务。

Gunicorn 的部署文档说了很多同样的话:

尽管有许多 HTTP 代理可用,但我们强烈建议您使用 Nginx。如果您选择另一个代理服务器,则需要确保在使用默认 Gunicorn 工作程序时它缓冲慢速客户端。如果没有这种缓冲,Gunicorn 将很容易受到拒绝服务攻击。

因此,Gunicorn 服务于快速、低延迟的高带宽客户端,而 Nginx 服务于其余的客户端。

于 2012-07-26T05:59:08.403 回答
7

Nginx 是一个 Web 服务器和反向代理,负责提供静态内容、gzip 压缩、ssl、proxy_buffers 和其他 HTTP 内容,而 gunicorn 是一个 Python HTTP 服务器,它与 nginx 和您的实际 Python Web 应用程序代码交互以提供动态内容。

这是 HTTP 请求生命周期的高级概述,突出了它们的角色。我假设您有一台服务器运行一个包含三个主要进程的简单应用程序。

Nginx:在端口 80 上侦听来自 Internet 的传入 HTTP 请求。

Gunicorn:在另一个端口(8000 是流行的端口)上侦听来自 Nginx 的 HTTP 请求。Gunicorn 配置了您的 python web 应用程序。

于 2019-10-20T11:12:12.270 回答