Re: не работает proxy_cache

Maxim Dounin mdounin на mdounin.ru
Ср Июл 20 12:56:24 MSD 2011


Hello!

On Wed, Jul 20, 2011 at 12:24:59PM +0400, Евгений Торопов wrote:

> Добрый день,
> 
> Не могу понять, что мешает кэшированию.
> 
> Кэш-конфиг:
> 
> proxy_cache_path /opt/local/nginx/cache levels=1:2 keys_zone=sup:32m max_size=1024m inactive=1h;
> 
> proxy_cache                 sup;
> proxy_cache_valid           1h;
> 
> proxy_cache_key            "$host$request_uri";
> proxy_cache_methods         POST;
> 
> 
> 
> Отрывок дебаг лога:

[...]

> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy status 200 "200 OK"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Date: Wed, 20 Jul 2011 08:02:16 GMT"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Server: Apache/2.0.52 (Red Hat)"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Content-Encoding: deflate"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Vary: Accept-Encoding"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Set-Cookie: JSESSIONID=avIghzWKEQxa; path=/"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Connection: close"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header: "Content-Type: text/xml; charset=ISO-8859-1"
> 2011/07/20 12:02:20 [debug] 99556#0: *15 http proxy header done

Как минимум - ставится сессионная кука, nginx такой ответ 
кешировать не будет, если его специально не попросить.

Попросить кешировать (и спрятать куки, чтобы не выставлять их всем 
клиентам из кеша) можно так:

    proxy_ignore_headers Set-Cookie;
    proxy_hide_header Set-Cookie;

Ещё я бы рекомендовал либо добавить в ключ кеширования 
Accept-Encoding ($http_accept_encoding), либо выключить сжатие на 
бекендах.  Сейчас nginx не понимает Vary, и в вашем случае в кеш 
ляжет ответ сжатый deflate'ом, что может не устроить браузер, 
который потом будет получать ответ из кеша.  Простейший способ 
выключить сжатие - просто не пропускать на бекенд заголовок 
Accept-Encoding, как-то так:

    proxy_set_header Accept-Encoding "";

Maxim Dounin



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