Varnish 3 выполняет gunzip, даже если весь трубопровод gzipped
Я рефакторинг своего Varnish VCL и не могу понять это одно.
Varnish 3.0 изначально поддерживает GZIP-контент, и, по-видимому, делает это правильно. Смотрите также: https://stackoverflow.com/a/12962493/35434
Тем не менее, согласно varnishlog, Varnish по-прежнему выполняет шаг зазарядки, даже если клиент запрашивает сжатый контент, а серверная часть отвечает сжатым содержимым. Согласно документам 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.
Операция с использованием пистолета является относительно легкой, но я все же хотел бы понять, почему, и, возможно, предотвратить несколько сотен тысяч операций.
1 ответ
Можете ли вы установить это в свой раздел vcl_fetch()
set beresp.do_gunzip = false;
Это должно остановить лак, делая gzip.