Как показывать изображения из Riak

У меня есть куча документов уценки в Riak, которые я открываю через небольшой Sinatra API с базовыми функциями поиска и т. д.

С каждым документом связано изображение, которое также хранится в Riak (в другом сегменте). Я хотел бы, чтобы клиентское приложение отображало документы вместе с соответствующими изображениями, поэтому мне нужен какой-то способ сделать изображения доступными, но, поскольку я буду запрашивать их только по ключу, кажется расточительным обслуживать их через Приложение Sinatra, как я делаю с документами.

Однако мне неудобно обслуживать их напрямую из Riak, потому что а) даже используя nginx для ограничения допустимых запросов, я беспокоюсь о раскрытии большего количества функций, чем мы хотим, и б) Riak выдает 403 для любого запроса, где установлен реферер, поэтому по умолчанию использование прямого URL-адреса Riak в качестве src тега img не работает.

Итак, мой вопрос: какой хороший подход использовать для обслуживания изображений? Добавить еще одну конечную точку в приложение Sinatra? Напрямую от Riak, используя какое-то волшебство Nginx, которое в настоящее время мне недоступно? Или какой-то другой подход, который я еще не рассматривал? В идеале это будет использовать Ruby, так как команда, с которой я работаю, более удобна.

Не уверен, что этот вопрос лучше подходит для сбоя сервера - если да, я перенесу его.


person Russell    schedule 09.12.2013    source источник


Ответы (1)


Вы правы, беспокоясь о том, что Riak может быть подключен к любой прямой связи. Пока в начале следующего года не выйдет версия 2.0, в системе не будет безопасности (хотя 403 для запросов с реферером — это механизм безопасности для защиты от XSS), и даже при наличии безопасности доступ любой базы данных непосредственно в Интернет чреват катастрофой.

Я ничего не делал с nginx, но все, что вам действительно нужно для его правильного использования, я думаю, это две функции:

  • Возможность ограничить запросы на GET
  • Возможность ограничить (или переписать) запросы в нужное ведро
  • Возможность удалить все заголовки HTTP, которые Riak включает в свой результат (что, поскольку nginx является прокси-сервером, а не прямым балансировщиком нагрузки, кажется, должно быть простым)

Предполагая, что ваши изображения — единственный контент в этой корзине, nginx кажется здесь разумным выбором.

person macintux    schedule 09.12.2013
comment
Меня все еще немного беспокоит простое использование nginx, так как кажется, что есть много способов пропустить что-то, что вы не хотите, чтобы было доступно. /images/foo.png/_,_,_ или /images?keys=true - те очевидные, которые я поймаю, но у меня нет достаточно знаний о Риаке, чтобы быть уверенным, что ничего не пропущу. - person Russell; 10.12.2013
comment
Другая моя проблема заключается в том, что если материал nginx сломается, будет забыт или удален при развертывании, то, скорее всего, он просто молча откроет доступ, ничего не переставая работать, поэтому, скорее всего, это не будет замечено. - person Russell; 10.12.2013
comment
Это обоснованные опасения. Я бы настоятельно рекомендовал задать этот вопрос в списке рассылки riak-users; Могу поспорить, что у кого-то уже есть шаблон, который отфильтровывает любые запросы, кроме простого поиска ключей. - person macintux; 10.12.2013