Gunicorn 和 Nginx 的区别

Ale*_*xis 19 nginx gunicorn

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

Int*_*nex 11

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

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

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

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

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

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


Ben*_*ari 6

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

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

Nginx:侦听端口 80 以获取来自 Internet 的传入 HTTP 请求。

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