Настройте nginx для обслуживания кэшированных изображений - PullRequest
1 голос
/ 22 октября 2009

У меня есть приложение 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 ]

3 голосов
/ 30 мая 2011

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

что-то вроде

location /images/show {
    try_files $document_root/cache$uri;
}
3 голосов
/ 29 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...