Re: Настройка proxy cache + gzip

Maxim Dounin mdounin at mdounin.ru
Wed Nov 28 11:23:01 UTC 2012


Hello!

On Wed, Nov 28, 2012 at 04:23:12AM -0500, SenatoR wrote:

> Добрые сутки!
> 
> Образил уже весь рунет, но либо такая проблема есть только у меня, либо всем
> на нее пофиг. Допустим, у нас есть proxy_cache или fastcgi_cache. Заставим
> его закешировать тестовую страницу, для чего зайдем на нее из браузера,
> поддерживающего сжатие gzip. В кеше на диске видно, что страница сжата и
> присутствуют соответствующие этому заголовки.
> 
> А теперь зайдем на ту же страницу браузером без поддержки gzip (хоть тот же
> wget). Страница отдается из кеша, кодированной (!!!), вместо текста -
> кракозябры.  
> 
> Временно я решил эту проблему вот так:
> 
> if ($http_user_agent ~ "MSIE [4-6]\.|Safari|Konqueror") {
> 	    # В этих браузерах имеются баги при обработке gzip-сжатых файлов с
> длинными URL-ами.
> 	    set $no_gzip 1;
> 	  }
> 	  
> 	  if ($http_accept_encoding !~ "gzip") {
> 	    set $no_gzip 1;
> 	  }
>     
> 	  proxy_cache my_cache;
> 
> 	  proxy_cache_key
> "$no_gzip|$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
> 
> Но сами понимаете, обидно кешировать 2 одинаковые страницы. Что делать и как
> быть?  gzip_disable не помогает.

Есть два способа кешировать только один вариант страницы:

1) Кешировать не сжатую страницу.  Для этого можно либо отключить 
сжатие на бекенде, либо сделать

    proxy_set_header Accept-Encoding "";

Как-то так обычно у всех и работает.

2) Кешировать сжатую страницу.  Для этого нужно, наоборот, 
включить сжатие, и принудительно выставить Accept-Encoding так, 
чтобы бекенд жал ответы, и обеспечить расжатие ответов для 
клиентов, которые gzip не поддерживают:

    gunzip on;
    proxy_set_header Accept-Encoding "gzip";

Для этого необходим модуль gunzip (в 1.3.x присутствует в коробке, 
http://nginx.org/r/gunzip, для более старых версий - при желании 
собирается как сторонний).

-- 
Maxim Dounin
http://nginx.com/support.html



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