Назад | Перейти на главную страницу

Varnish 3 выполняет сжатие, даже если весь конвейер сжат

Я занимаюсь рефакторингом VCL Varnish и не могу понять этого.

Varnish 3.0 изначально поддерживает сжатый контент, и, по сути, он работает правильно. Смотрите также: https://stackoverflow.com/a/12962493/35434

Однако Varnish по-прежнему выполняет этап gunzip, согласно varnishlog, даже несмотря на то, что клиент запрашивает сжатый с помощью gzip контент, а серверная часть отвечает с gzip-содержимым. Согласно документации Varnish, Varnish по умолчанию имеет значение do_gzip = true, а также сохраняет сжатые объекты кеша. Итак, почему же архиватор?

Вот соответствующие записи журнала:

11 RxURL        c /javascripts/general.js
11 RxHeader     c Accept-Encoding: deflate, gzip
11 VCL_call     c fetch
13 TxHeader     b Accept-Encoding: gzip
13 RxHeader     b Content-Encoding: gzip
13 RxHeader     b Content-Type: application/javascript
11 Gzip         c u F - 1554 4476 80 80 12365
11 VCL_call     c deliver
11 TxHeader     c Content-Encoding: gzip

Как видите, весь конвейер поддерживает gzip, но Varnish выполняет gunzip во время vcl_fetch. Я предполагаю, что он хранит сжатые объекты, и, как вы можете видеть, он также доставляет их в сжатом виде.

После этого запроса varnishstat показывает, что произошла операция gunzip:

$ varnishstat -1 | grep zip
n_gzip                       0         0.00 Gzip operations
n_gunzip                     1         0.00 Gunzip operations

Примечание. В моем VCL есть нет gzip, и я ничего не делаю с телом объекта. Я полагаюсь на разумные значения по умолчанию, поэтому я не показываю VCL.

Операция с архивированием относительно легкая, но я все же хотел бы понять, почему, и, возможно, предотвратить несколько сотен тысяч операций.

Не могли бы вы установить это в свой раздел vcl_fetch ()

set beresp.do_gunzip = false;

Это должно остановить сжатие лака.