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

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


Добрый день.

Есть такой nginx

/usr/local/nginx/sbin/nginx -V
nginx version: nginx/0.7.67
built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
TLS SNI support enabled
configure arguments: --with-http_stub_status_module
--with-http_gzip_static_module --with-http_ssl_module
--with-openssl=/root/openssl-1.0.0a/

и такой конфиг

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-е ответы?


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