澄清:Heroku是否在Nginx后面运行Python应用程序?

BFa*_*Far 5 python nginx heroku

TL / DR:我的主要问题:是否值得花时间尝试将NGinx添加到我的Django / Gunicorn / Cedar / PostgresSql应用程序中,或者Heroku是否为我实现了这种性能改进?

在Cedar文档(https://devcenter.heroku.com/articles/cedar)中,它明确指出cedar不支持反向代理。“ Cedar不包括诸如Varnish之类的反向代理缓存,而是希望使开发人员能够选择最能满足其需求的CDN解决方案。”

同样在“路由”文章(https://devcenter.heroku.com/articles/http-routing#gzipped-responses)中,指定了nginx不会自动完成:“因为对Cedar应用程序的请求是直接向应用程序服务器发出的–不通过像nginx这样的HTTP服务器进行代理–必须在您的应用程序内完成响应的任何压缩。”

但是,在Python常见问题解答中,它表示 相反:https : //devcenter.heroku.com/articles/python-faq#do-python-applications-run-behind-nginx “不。不需要使用反向代理在Heroku上运行,因为Heroku Cloud Platform会处理这些服务器通常为您所做的一切。

您的应用程序仅提供一个Python服务器来响应HTTP请求.Gunicorn,Gevent和Eventlet是绝佳的选择。

由于Web服务器是嵌入在您的应用程序中的,因此您可以在任何环境中轻松测试和调试完全相同的代码。这种开发和生产上的均等性使得在开发周期中解决问题变得很容易。”

在我看来,Heroku可以解决反向代理的某些好处,但不能解决压缩问题。真的吗?

BFa*_*Far 5

收到 Heroku 支持的回复:

我们不建议尝试将 nginx 添加到您的堆栈中,Heroku 也不提供该层。但是您是正确的,如果您希望 gzip 响应,您的应用程序必须 gzip 响应 - 这通常在应用程序框架(例如 Ruby 的 Rack)中作为中间件层处理。gzip 非常快,这不会给您的请求增加任何明显的延迟。

这确认您不需要在 Heroku 上运行 Nginx 以实现其反向代理功能。