Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Настройка proxy cache + gzip
 
 
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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
 
 |