【发布时间】:2012-05-30 18:04:10
【问题描述】:
这是一个初学者问题,但我无法理解 Gunicorn 和 Nginx 之间的抽象。我不是在寻找详细的答案,只是在高层次上,每个人扮演的角色是什么?他们如何互动?
【问题讨论】:
这是一个初学者问题,但我无法理解 Gunicorn 和 Nginx 之间的抽象。我不是在寻找详细的答案,只是在高层次上,每个人扮演的角色是什么?他们如何互动?
【问题讨论】:
Nginx 是一个 Web 服务器和反向代理,负责提供静态服务 内容、gzip 压缩、ssl、proxy_buffers 和其他 HTTP 内容 而 gunicorn 是一个 Python HTTP 服务器,它与两个 nginx 接口 以及您实际的 python web-app 代码来提供动态内容。
以下是 HTTP 请求生命周期的高级概述 突出他们的角色。我假设您有一台服务器运行 具有三个主要流程的简单应用。
Nginx:在端口 80 上侦听来自 互联网。
Gunicorn:在另一个端口(8000 是流行的端口)上侦听 HTTP 来自 Nginx 的请求。 Gunicorn 已使用您的 Python Web 应用程序进行配置。
【讨论】:
根据Gunicorn's deploy doc,我的理解是您使用 Nginx 作为 Gunicorn 的代理服务器。
由于 Gunicorn 是从 Ruby's Unicorn 移植的,我假设 Unicorn 的限制和规范也适用于 Gunicorn:
Unicorn 是用于 Rack 应用程序的 HTTP 服务器,旨在仅提供服务 低延迟、高带宽连接上的快速客户端,并采取 Unix/类 Unix 内核中的功能优势。慢客户端应该 只能通过放置能够完全缓冲的反向代理来提供服务 Unicorn 和慢速客户端之间的请求和响应。
Gunicorn's deploy doc 说了很多同样的话:
尽管有许多 HTTP 代理可用,但我们强烈建议 你使用 Nginx。如果您选择另一个代理服务器,您需要 确保在使用默认 Gunicorn 时缓冲慢速客户端 工作人员。如果没有这种缓冲,Gunicorn 将很容易受到影响 拒绝服务攻击。
所以 Gunicorn 服务于快速、低延迟的高带宽客户端,而 Nginx 服务于其余部分。
【讨论】: