Дома пользуюсь небольшой HTTP проксёй/кэшем: polipo.
Заметил, что nginx не отдает ему сжатый контент, тогда как при обращении
к нему напрямую мозиллой приходит нормальный content-encoding: gzip.
Произвел несколько экспериментов. Дело оказалось в заголовке Via.
Вот тут nginx отдавал gzip, как и положено:
GET /robots.txt HTTP/1.1
Host: 12.34.56.7
Accept-Encoding: gzip
Как только добавляется заголовок Via:, gzip сразу как не бывало, и
отдается plain text:
GET /robots.txt HTTP/1.1
Host: 12.34.56.7
Accept-Encoding: gzip
Via: 1.1 test.com
Это баг, или такая фича?
Фича. Сжатием ответов на проксированные запросы можно управлять директивами:
gzip_http_version [ 1.0 | 1.1 ];
gzip_proxied [ any | off |
expired no-cache no-store private auth
no_last_modified no_etag ];
Они примерно соответствуют директивам mod_deflate:
http://sysoev.ru/mod_deflate/readme.html#DeflateHTTPhttp://sysoev.ru/mod_deflate/readme.html#DeflateProxied
gzip_proxied гибче. Например, "DeflateProxied nocachable" соотвествует
"gzip_proxied expired no-cache", "DeflateProxied poor_cachable" -
"gzip_proxied expired no-cache no-store private no_last_modified no_etag"
"gzip_proxied auth" относится к некэшируемым.
По умолчанию
gzip_http_version 1.1;
gzip_proxied off;
Игорь Сысоев
http://sysoev.ru