Я занимаюсь рефакторингом 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;
Это должно остановить сжатие лака.