Re: Кеширование редиректов - proxy_cache 301

Serge Negodyuck petr на petrovich.kiev.ua
Пн Сен 6 16:40:48 MSD 2010


> proxy_cache_path  /opt/nginx-cache-img levels=2:2
> keys_zone=img1:256m inactive=15d;
>
>
> upstream   img_backend  {
>    server   10.1.1.1:8000;
> }
>
> server {
>   location /img/ {
>       proxy_hide_header Set-Cookie;
>       proxy_pass http://img_backend;
>       proxy_cache img1;
>       proxy_cache_valid 301 15d;
>       proxy_cache_valid 200 24h;
>       proxy_cache_key $host$request_uri;
>    }
> }
>
> Делаем два запроса, получаем в логах
>
> 10.0.0.1 - - [06/Sep/2010:14:50:57 +0300] "GET
> /img/1008516/2260large.jpg HTTP/1.0" 301 348 "-" "Opera/9.80 (X11;
> Linux i686; U; ru) Presto/2.6.30 Version/10.61" 10.1.1.1:8000
> 10.0.0.1 - - [06/Sep/2010:14:51:09 +0300] "GET
> /img/1008516/2260large.jpg HTTP/1.0" 301 348 "-" "Opera/9.80 (X11;
> Linux i686; U; ru) Presto/2.6.30 Version/10.61" 10.1.1.1:8000
>
> Последний параметр в логах - $upstream_addr. Т.е. оба раза был запрос
> на апстрим.
>
> По логике и по описанию директива
> proxy_cache_valid 301 15d;
> должна была закешировать 301й редирект на 15 дней, и следующий раз не
> лезть лишний раз на бэкенд, чтобы он сгенерировал редирект. Но
> почему-то этого не происходит.
> Помогите понять почему, и что нужно сделать, чтобы кешировать 301-е ответы?

Разобрался. Как правило всякие фреймворки отдают для редиректов такие заголовки
Pragma: no-cache
Cache-Control: no-cache

И необходима директива
proxy_ignore_headers Cache-control;


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