aws、django、unicorn 和 s3 - 那我需要 nginx 吗?

Posted

技术标签:

【中文标题】aws、django、unicorn 和 s3 - 那我需要 nginx 吗?【英文标题】:aws, django, unicorn and s3 - do I need nginx then? 【发布时间】:2012-02-13 06:47:08 【问题描述】:

我正在 django 中构建应用程序,我想将其部署在 aws ec2 服务器上。该应用程序将在 gunicorn 上运行,我想将静态文件放在 s3 上。所以我的问题是——我需要使用 nginx 吗?

除了提供静态文件之外,使用 nginx 还有其他好处吗?

阿瑞克

【问题讨论】:

在浏览了 2 本关于 nginx 的书籍之后 - 我可以说其中还有更多内容,然后是静态文件服务,正如 Sid 提到的 gunicorn 文档 (gunicorn.org/deploy.html) 建议将 nginx 放在他们的服务器前面(缓慢的客户端缓冲)。谢谢你们。 serverfault.com/questions/331256/… - gunicorn 开发者的良好解释 【参考方案1】:

将 nginx 放在堆栈的前端不仅可以让您将静态内容请求路由到 s3 存储,还可以让您执行诸如缓存 django 请求并降低应用程序和数据库中的命中率之类的事情。您可以设置细粒度缓存策略并更好地控制请求的确切位置,同时仍与您在 django 中设置的 url 结构相同。

【讨论】:

通过 nginx 将静态内容路由到 s3 会不会很慢? 将 url 直接嵌入到 s3 真的取决于应用程序。它可以是 nginx 通过子域或 url 匹配解析的东西,也可以是应用程序实际使用永远不会通过 nginx 返回的 s3 url 的东西。 我觉得这非常针对媒体静态,但对于像 instagram 这样的大型项目的通用样式,我想知道标准是通过 nginx 链接 s3 还是嵌入 s3 url @Mr-Programs 这是一个 7 岁的答案。我确信有 AWS 提供的负载平衡、路由和缓存选项,而不是 nginx。但我的回答仍然是,nginx 可以提供比路由静态内容更多的好处。它可以在您的应用程序之前执行 TLS 终止。并且可以缓存动态内容。【参考方案2】:

即使您在 S3 上放置静态文件,您仍然需要一个 Web 服务器来为它们提供服务,对吧?我看不出 S3 如何改变这样一个事实,即使用 Apache/WSGI 或 gunicorn 最好让 nginx 之类的东西提供静态文件。 另外,请阅读:http://gunicorn.org/deploy.html

【讨论】:

如果静态文件在 S3 上,那么它们将由 S3 提供,而不是应用服务器。 是的,但是什么是将请求路由到 s3 静态位置?使用某种 s3 绝对 URL 对他来说并不理想。他应该使用 nginx 将他域下的所有静态内容映射到他的 s3 mipadi 是对的 - s3 提供文件,我得到了它们的链接,我不在乎它们是如何提供的 @jdi - 使用路由 53(可能是 aws dns 服务器或任何其他 dns 服务器)我可以像这样将 url 映射到 smth:static.maindomain.com/filename - 或任何其他 url - 什么是这有问题吗? 我仍然觉得使用 nginx 会很有用。如果您在使用 S3 时遇到问题,或者您的存储成本被证明很高,并且您想切换到其他东西,那么您将做好准备。

以上是关于aws、django、unicorn 和 s3 - 那我需要 nginx 吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS S3 for django 在 heroku 上提供静态文件?

如何使用 django 和 aws s3 在点击时强制下载图像

读取和写入存储在 aws s3 (Heroku + Django) 中的数据库文件

尝试访问管理字体文件时,Django 在 AWS S3 中托管静态文件导致 CORS 错误

使用带有 Compressor 的 Boto 的 Django AWS S3 无法压缩 UncompressableFileError

django aws s3 图像在上传和访问各种调整大小的图像时调整大小