Настройте nginx для обслуживания кэшированных изображений

У меня есть приложение Rails, которое генерирует много изображений; т.е. контроллер изображений с действием show выбирает изображение из SAN и обслуживает его. У меня есть страница caches_, которая надежно сохраняет копию файла в произвольном месте; RAILS_ROOT + /public/cache. Файлы там и выглядят нормально.

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

Чтобы уточнить, у меня есть URI, как это:

/images/show/123.jpg

файл может существовать здесь:

/cache/images/show/123.jpg

Как я могу заставить nginx обслуживать этот файл и не передавать запрос?

Вот неполный список того, что я пробовал:

if (-f /cache$request_filename) { 
  rewrite (.*) /cache$1 break;
  break; 
}

if (-f /cache$uri.jpg) {
rewrite (.*) /cache$1.jpg break;
}

if (-f /cache/images/show/$request_filename) {
rewrite (.*) /cache/images/show/$1.jpg break;
}

Есть идеи?

Обновление: я ответил на свой вопрос. Правильное правило было:

      if (-f $document_root/cache$request_uri) {
      rewrite (.*) /cache$1 break;
      }

2 ответа

Вы также можете кэшировать изображения непосредственно на Nginx, используя MemcachedModule.

Для nginx рекомендуется использовать директиву try_files

что-то вроде

location /images/show {
    try_files $document_root/cache$uri;
}
Другие вопросы по тегам