2015-10-27 9 views
7

gzip_proxied директива позволяет для следующих вариантов (не исчерпывающий):Каковы параметры для директивы gzip_proxied?

  • истек
    включает сжатие, если заголовок ответа включает в себя «Expires» поле со значением, которое отключает кэширование;
  • no-cache
    Включает сжатие, если заголовок ответа включает в себя поле «Cache-Control» с параметром «no-cache»;
  • no-store
    включает сжатие, если заголовок ответа включает в себя поле «Cache-Control» с параметром «no-store»;
  • private
    Включает сжатие, если заголовок ответа включает в себя поле «Cache-Control» с «частным» параметром;
  • no_last_modified
    Включает сжатие, если заголовок ответа не включает поле «Последнее изменение»;
  • no_etag
    Включает сжатие, если заголовок ответа не включает поле «ETag»;
  • auth
    Включает сжатие, если заголовок запроса включает в себя поле «Авторизация»;

Я не вижу разумной причины использовать большинство этих параметров. Например, почему должен был или нет прокси-запрос содержать заголовок Authorization, или Cache-Control: private, повлиять на то, хочу ли я его gzip?

Учитывая, что старые версии Nginx strip ETags from responses when gzipping them, я вижу случай использования для no_etag: если вам не Nginx сконфигурировано для генерации ETags для ваших сжат GZIP ответов, вы можете предпочесть, чтобы передать несжатый ответ с ETag вместо генерации сжатого без ETag.

Я не могу понять других.

Каковы предполагаемые варианты использования каждого из этих вариантов?

ответ

7

Из admin guide: (курсив мой)

Директива имеет ряд параметров, определяющих, которые должны сжиматься виды проксируемого запросов NGINX. Например, разумно сжимать ответы только на запросы, которые не будут кэшироваться на прокси-сервере. Для этой цели директива gzip_proxied имеет параметры, которые инструктируют NGINX проверять поле заголовка Cache-Control в ответе и сжимать ответ, если значение не является кешем, не хранить или закрыто. Кроме того, вы должны указать параметр expired, чтобы проверить значение поля заголовка Expires.Эти параметры задаются в следующем примере вместе с параметром auth, который проверяет наличие поля заголовка авторизации (авторизованный ответ специфичен для конечного пользователя и обычно не кэшируется).

Я бы согласитесь, что не сжимать кешируемые ответы разумно. Подумайте, что основная сбережения кэширования в прокси-сервере заключается в увеличении производительности (времени ответа) и сокращении времени и пропускной способности, которые прокси тратит на запрос ресурса вверх по течению. Компромисс для получения этих преимуществ производительности - это стоимость хранения кеша. Вот некоторые примеры использования, где не сжимающие Cacheable ответов имеют смысл:

  1. В обычном интернете-трафике многих сайтов, неперсонализированных ответы (которые составляют большинство кэшируемых ответов) был уже оптимизирована с помощью таких методов, как миниатюра скриптов, оптимизацию размера изображения и т. д., в процессе построения сети. Хотя эти статические ресурсы могут немного сокращаться от сжатия, стоимость процессора, пытаясь уменьшить их размер, вероятно, не является эффективным использованием ресурсов ресурса прокси-уровня. Но динамически сгенерированные страницы, обслуживаемые зарегистрированным пользователям, содержащие тонны контента, создаваемого приложением, скорее всего, выиграют от сжатия (и обычно не будут кэшироваться).

  2. Вы устанавливаете прокси-сервер перед дорогостоящей службой восходящего потока, но вы являетесь , откликаясь на другой прокси, который будет отвечать за сжатие для каждого пользовательского агента. Например, если у вас есть CDN, который делает несколько запросов одним и тем же дорогостоящим исходным ресурсом (из отдельных географических краев), и вы хотите, чтобы вы могли повторно использовать дорогостоящий ответ. Если CDN кэширует несжатые версии (для обслуживания сжатых и несжатых пользовательских агентов), вы можете сжимать свой прокси-сервер только для того, чтобы они снова распаковывались на CDN, что было просто пустой тратой оборудования и электричества с обеих сторон, чтобы уменьшить пропускную способность в часть полосы пропускания с наибольшей пропускной способностью. (Ответное сжатие gzip наиболее выгодно на последней миле, чтобы получить данные ответа на телефон пользователя, который упал до одной точки сигнала, когда они входят в метро.)

  3. Для значительных объектов ответа могут потребоваться запросы (от различных пользовательских агентов, но часто через нисходящие посредники CDN) для байтов диапазонов ресурса, для пользовательских агентов, которые не поддерживают сжатие. CDN, скорее всего, будет обслуживать запросы диапазона байтов из собственного кеша, при условии, что он имеет несжатую версию уже в своем кеше.

+1

«* Стоимость процессора, пытаясь уменьшить их размер, вероятно, не является эффективным использованием ресурсов ресурса прокси-уровня *» - но мы не говорим о gzipping в прокси-слое, не так ли? Мы говорим о gzipping на бэкэнде Nginx, за некоторым прокси-слоем, который перенаправил запрос на этот бэкэнд Nginx; для прокси-уровня не требуется сжимать или разжимать сам ответ. (Не влияет на общую направленность вашей точки, просто нажимает.) –

+0

Пункт 1 (о gzipping часто не стоит на кэшируемых ресурсах, потому что кэшируемые ресурсы часто уже минимизированы, а gzipping minified resources - пустая трата времени) чувствует себя очень слабым меня. В принципе это разумно, но я считаю, что это на практике неверно; люди, которые [измеряли влияние gzipping -минированного контента в другом месте на Stack Overflow] (http://stackoverflow.com/questions/807119/gzip-versus-minify), обнаружили, что gzipping все еще значительно уменьшает размер файла, даже когда контент gzipped уже включен. –

+0

Баллы 2 и 3, с другой стороны, гораздо более убедительны! Если я могу предоставить прокси-серверы tl; dr: обычно требуется распакованная версия содержимого, которое они кэшируют, либо для обслуживания пользовательских агентов, которые не поддерживают gzip, либо для обслуживания запросов диапазона байтов. Поэтому, если они кэшируют его, прокси должны декомпрессировать ваш gzip-ответ, затрачивая процессорное время.Единственное преимущество, которое вы получаете взамен, - это сокращение использования пропускной способности между прокси-сервером и сервером, но в некоторых случаях (например, прокси-сервер и бэкэнд в одной и той же локальной сети) пропускная способность прокси-сервера может быть практически неограниченной. –