ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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


 




Copyright © Lexa Software, 1996-2009.