【问题标题】:How to serve images from Riak如何提供来自 Riak 的图像
【发布时间】:2013-12-09 10:47:00
【问题描述】:

我在 Riak 中有一堆降价文档,我通过一个带有基本搜索功能等的小型 Sinatra API 公开这些文档。

每个文档都有一个关联的图像,也存储在 Riak 中(在不同的存储桶中)。我想让一个客户端应用程序在相关图像旁边显示文档 - 所以我需要一些方法来使图像可用,但由于我只会通过密钥请求它们,因此通过 a 为它们提供服务似乎很浪费Sinatra 应用程序,就像我正在处理文档一样。

但是,我对直接从 Riak 提供服务感到不安,因为 a) 即使使用 nginx 来限制可接受的请求,我也担心会暴露比我们想要的更多的功能,并且 b) Riak 会为引用者的任何请求抛出 403已设置,因此默认情况下使用直接到 Riak 的 URL 作为 img 标签的 src 不起作用。

所以我的问题是 - 提供图片的好方法是什么?向 Sinatra 应用程序添加另一个端点?直接从 Riak 使用一些我目前无法使用的 Nginx 魔法?还是我还没有考虑过的其他方法?理想情况下,这将使用 Ruby,因为我正在与之合作的团队更愿意使用 Ruby。

不确定这个问题是否更适合服务器故障 - 如果是这样,我会把它移过来。

【问题讨论】:

    标签: image nginx sinatra riak


    【解决方案1】:

    您担心将 Riak 暴露于任何直接连接是正确的。直到明年年初 2.0 到来之前,系统中都没有安全措施(尽管 403 用于请求引用的请求是一种防止 XSS 的安全机制),即使有安全措施,将任何数据库直接暴露在 Internet 上也会招致灾难。

    我没有对 nginx 做过任何事情,但我认为正确使用它真正需要的只是两个功能:

    • 能够限制对 GET 的请求
    • 能够将请求限制(或重写)到正确的存储桶
    • 能够去除 Riak 包含在其结果中的所有 HTTP 标头(由于 nginx 是代理服务器而不是直接的负载平衡器,因此看起来应该很简单)

    假设您的图像是该存储桶中唯一的内容,那么 nginx 在这里感觉是一个合理的选择。

    【讨论】:

    • 我仍然对仅使用 nginx 感到有些不安,因为感觉有很多方法可以让您不想访问的东西溜走.. /images/foo.png/_,_,_/images?keys=true - 那些显而易见的我会抓住,但我对 Riak 的了解不够,无法确定我不会错过任何东西。
    • 我的另一个担忧是,如果 nginx 的东西“损坏”或被部署忘记或删除,那么可能的结果是它只是默默地打开访问权限而没有任何停止工作 - 所以很可能不会被注意到。
    • 这些都是有效的问题。我强烈建议将该问题提交给 riak-users 邮件列表;我敢打赌,有人已经有了一种模式,可以过滤掉简单密钥检索之外的任何请求。
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 2011-09-27
    • 2019-08-04
    • 2020-01-15
    • 1970-01-01
    • 2012-03-03
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多