Re: кэширование только определенных типов

Igor Sysoev igor на sysoev.ru
Вт Июн 22 12:39:35 MSD 2010


On Tue, Jun 22, 2010 at 04:32:36AM -0400, F0iL wrote:

> Уважаемые, подскажите пожалуйста
> решение следующего вопроса:
> nginx - фронтенд, apache - бэкенд.
> допустим, мне надо кэшировать только
> некоторые типы файлов (графика и
> статика), а остальное передавать
> напрямую и без кэширования.
> как реализовать?
> 
> очевидный на первый взгляд вариант:
> 
> location / {
> proxy_pass ....
> }
> 
> location ~* ^.+\.(ico|jpg|jpeg|gif|js|png|htm|html)$ {
> include cache_on.inc;
> proxy_pass ....
> }
> 
> не прокатывает по причине того, что
> proxy_pass не может быть под регулярным
> выражением.
> 
> Была мысль при совпадении условия
> (регулярного выражения) делать rewrite
> куда-нибудь например на /ngncahce/....
> а для него уже включать кэширование, но
> там проблема в том, что движок успешно
> переписывает выражение, повторяет
> обработку снова, натыкается на свое же
> условие (рег. выр.) и снова делает
> реврайт, и так до бесконечности.
> break ставить нельзя, т.к. тогда, само
> собой, не сработает proxy_pass дальше.
> 
> была задумка сделать проверку на два
> условия - на совпадение расширения
> файла (рег. выражение) и на наличие ngncache
> в урле (т.е. что его уже переписали), но
> как я поял, скриптовый движок nginx не
> умеет операцию AND для условий в if, то
> есть сразу два условия поставить
> нельзя.
> 
> Подскажите, как реализовать желаемое?

 location ~* ^.+\.(ico|jpg|jpeg|gif|js|png|htm|html)$ {
     include cache_on.inc;
     proxy_pass  http://backend;  #  без "/"
 }


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru