Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_cache

Описание: Фильтр кэширования HTTP, соответствующий RFC 2616.
Статус: Расширение
Идентификатор модуля: cache_module
Исходный файл: mod_cache.c

Краткое описание

Используйте этот модуль с осторожностью: если директива CacheQuickHandler имеет значение по умолчанию on, директивы Allow и Deny будут обходиться. Не включайте кэширование с помощью быстрого обработчика для содержимого, доступ к которому требуется ограничить по имени или адресу клиентского узла либо по переменной окружения.

mod_cache реализует фильтр кэширования содержимого HTTP, соответствующий RFC 2616, с поддержкой кэширования согласованных по содержимому ответов, содержащих заголовок Vary.

Кэширование, соответствующее RFC 2616, предоставляет механизм проверки того, является ли устаревшее или просроченное содержимое всё ещё актуальным, и может значительно повысить производительность, если исходный сервер поддерживает условные запросы, учитывая заголовок запроса HTTP If-None-Match. Содержимое создаётся заново только в случае его изменения, а не при истечении срока действия записи в кэше.

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

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

Если отключить быстрый обработчик с помощью директивы CacheQuickHandler, фильтр CACHE можно будет вставить в выбранное администратором место цепочки фильтров. Это позволяет кэшировать содержимое до его персонализации фильтром mod_include или, при необходимости, сжатия фильтром mod_deflate.

При обычной работе mod_cache реагирует на заголовки Cache-Control и Pragma, отправленные клиентом в запросе или сервером в ответе, и может управляться ими. В исключительных случаях mod_cache можно настроить так, чтобы он переопределял эти заголовки и принудительно применял поведение, специфичное для сайта. Однако это поведение будет ограничено только данным кэшем и не повлияет на работу других кэшей, которые могут находиться между клиентом и сервером. Поэтому такой вариант не рекомендуется, если в нём нет строгой необходимости.

RFC 2616 разрешает кэшу возвращать устаревшие данные, пока существующая устаревшая запись обновляется с исходного сервера. Эта возможность поддерживается в mod_cache при соответствующей настройке директивы CacheLock. Такие ответы будут содержать заголовок HTTP Warning с кодом ответа 110. RFC 2616 также разрешает кэшу возвращать устаревшие данные, если попытка их обновления приводит к ошибке 500 или выше. По умолчанию mod_cache поддерживает такое поведение. Такие ответы будут содержать заголовок HTTP Warning с кодом ответа 111.

Для работы mod_cache требуются один или несколько модулей управления хранилищем. В базовый дистрибутив Apache входят следующие модули управления хранилищем:

mod_cache_disk
Реализует диспетчер хранилища на диске. Заголовки и тела сообщений хранятся на диске раздельно, в структуре каталогов, построенной на основе хеша md5 кэшированного URL. Можно одновременно хранить несколько согласованных по содержимому ответов, однако этот модуль не поддерживает кэширование частичного содержимого. Инструмент htcacheclean позволяет перечислять кэшированные URL, удалять их, а также поддерживать размер дискового кэша в пределах ограничений по объёму и количеству индексных дескрипторов.
mod_cache_socache
Реализует диспетчер хранилища на основе кэша разделяемых объектов. Заголовки и тела сообщений хранятся вместе под одним ключом, основанным на URL кэшируемого ответа. Можно одновременно хранить несколько согласованных по содержимому ответов, однако этот модуль не поддерживает кэширование частичного содержимого.

Дополнительные сведения, обсуждение и примеры приведены в руководстве по кэшированию.

Связанные модули и директивы

Связанные модули Связанные директивы
  • mod_cache_disk
  • mod_cache_socache
  • CacheRoot
  • CacheDirLevels
  • CacheDirLength
  • CacheMinFileSize
  • CacheMaxFileSize
  • CacheSocache
  • CacheSocacheMaxTime
  • CacheSocacheMinTime
  • CacheSocacheMaxSize
  • CacheSocacheReadSize
  • CacheSocacheReadTime

Пример конфигурации

Пример httpd.conf

#
# Sample Cache Configuration
#
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
    LoadModule cache_disk_module modules/mod_cache_disk.so
    <IfModule mod_cache_disk.c>
        CacheRoot "c:/cacheroot"
        CacheEnable disk  "/"
        CacheDirLevels 5
        CacheDirLength 3
    </IfModule>

    # When acting as a proxy, don't cache the list of security updates
    CacheDisable "http://security.update.server/update-list/"
</IfModule>

Предотвращение эффекта «стада»

Когда кэшированная запись устаревает, mod_cache отправляет условный запрос серверу-получателю, который должен подтвердить, что запись всё ещё актуальна, и отправить обновлённый объект, если это не так.

Между моментом, когда кэшированный объект устаревает, и моментом его полного обновления проходит небольшой, но конечный промежуток времени. На загруженном сервере за это время может поступить значительное количество запросов, что приведёт к внезапному и непредсказуемому наплыву запросов к серверу-получателю.

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

Первоначальное кэширование записи

При первом кэшировании объекта для него создаётся блокировка, которая сохраняется до полного кэширования ответа. Пока действует блокировка, кэш подавляет вторую и последующие попытки кэшировать тот же объект. Это не останавливает наплыв запросов, но не позволяет кэшу одновременно кэшировать один и тот же объект несколько раз.

Обновление устаревшей записи

Когда срок актуальности объекта истекает и он становится устаревшим, для него создаётся блокировка, которая сохраняется, пока не будет подтверждена актуальность ответа или пока сервер-получатель не заменит его. Пока действует блокировка, второй и последующие входящие запросы приводят к возврату устаревших данных, что помогает сдержать наплыв запросов.

Блокировки и Cache-Control: no-cache

Блокировки используются лишь как подсказка, позволяющая снизить нагрузку на серверы-получатели, однако при необходимости блокировку можно обойти. Если клиент отправляет запрос с заголовком Cache-Control, требующим перезагрузки, имеющаяся блокировка игнорируется: запрос клиента немедленно обрабатывается, а кэшированная запись обновляется.

В качестве дополнительной меры безопасности для блокировок задаётся максимальный срок действия. По его истечении блокировка удаляется, и новый запрос получает возможность создать новую. Максимальный срок можно задать директивой CacheLockMaxAge; значение по умолчанию — 5 секунд.

Пример конфигурации

Включение блокировки кэша

#
# Enable the cache lock
#
<IfModule mod_cache.c>
    CacheLock on
    CacheLockPath "/tmp/mod_cache-lock"
    CacheLockMaxAge 5
</IfModule>

Точный контроль с помощью фильтра CACHE

В режиме кэширования по умолчанию кэш работает как быстрый обработчик, минуя большую часть обработки на сервере и обеспечивая максимально высокую производительность кэширования.

В этом режиме кэш подключается к передней части сервера, работая так, будто перед сервером установлен отдельный прокси-сервер кэширования, соответствующий RFC 2616.

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

Чтобы решить эту проблему, директиву CacheQuickHandler можно установить в значение off. Тогда сервер будет выполнять все этапы, которые обычно обрабатываются для некэшированного запроса, включая этапы аутентификации и авторизации.

Кроме того, администратор может указать точное место в цепочке фильтров, где должно происходить кэширование, добавив фильтр CACHE в цепочку выходных фильтров.

Например, чтобы кэшировать содержимое до сжатия ответа, поместите фильтр CACHE перед фильтром DEFLATE, как показано в примере ниже:

# Cache content before optional compression
CacheQuickHandler off
AddOutputFilterByType CACHE;DEFLATE text/plain

Другой вариант — кэшировать содержимое до применения персонализации фильтром mod_include (или другим фильтром обработки содержимого). В этом примере шаблоны, содержащие теги, распознаваемые mod_include, кэшируются до разбора:

# Cache content before mod_include and mod_deflate
CacheQuickHandler off
AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html

Фильтр CACHE можно поместить в любое нужное место цепочки фильтров. В этом примере содержимое кэшируется после разбора фильтром mod_include, но до обработки фильтром mod_deflate:

# Cache content between mod_include and mod_deflate
CacheQuickHandler off
AddOutputFilterByType INCLUDES;CACHE;DEFLATE text/html

Предупреждение:

Если по какой-либо причине изменить расположение фильтра CACHE в цепочке фильтров, может потребоваться очистить кэш, чтобы обеспечить согласованность предоставляемых данных. mod_cache не может сделать это за вас.

Состояние кэша и ведение журнала

После того как mod_cache определит, следует ли отдавать объект из кэша, подробная причина этого решения записывается в окружение подпроцесса запроса в ключ cache-status. Эту причину можно записать в журнал с помощью директивы LogFormat следующим образом:

LogFormat "%{cache-status}e ..."

В зависимости от принятого решения о кэшировании причина также записывается в окружение подпроцесса под одним из следующих четырёх ключей:

cache-hit
Ответ был отдан из кэша.
cache-revalidate
Ответ устарел, был успешно проверен повторно, а затем отдан из кэша.
cache-miss
Ответ был получен от вышестоящего сервера.
cache-invalidate
Кэшированный объект был признан недействительным запросом с методом, отличным от GET или HEAD.

Это позволяет условно записывать в журнал кэшированные запросы, как показано в следующем примере:

CustomLog "cached-requests.log" common env=cache-hit
CustomLog "uncached-requests.log" common env=cache-miss
CustomLog "revalidated-requests.log" common env=cache-revalidate
CustomLog "invalidated-requests.log" common env=cache-invalidate

Авторы модулей могут использовать хук с именем cache_status, чтобы модули могли настраиваемым образом реагировать на описанные выше результаты кэширования.

Директива CacheDefaultExpire

Описание: Срок кэширования документа по умолчанию, если дата истечения срока действия не указана.
Синтаксис:
CacheDefaultExpire seconds
Значение по умолчанию:
CacheDefaultExpire 3600 (one hour)
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Директива CacheDefaultExpire задаёт срок по умолчанию в секундах, в течение которого документ следует кэшировать, если для него не указаны ни дата истечения срока действия, ни дата последнего изменения. Значение, заданное директивой CacheMaxExpire, не переопределяет эту настройку.

CacheDefaultExpire 86400

Директива CacheDetailHeader

Описание: Добавление заголовка X-Cache-Detail в ответ.
Синтаксис:
CacheDetailHeader on|off
Значение по умолчанию:
CacheDetailHeader off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache
Совместимость: Доступна в Apache 2.3.9 и более поздних версиях

Если директива CacheDetailHeader включена, в ответ добавляется заголовок X-Cache-Detail с подробной причиной принятого решения о кэшировании.

При разработке кэшируемых RESTful-сервисов может быть полезно добавлять в заголовки ответа дополнительные сведения о решении кэширования, чтобы проверить, правильно ли сервис и клиент используют Cache-Control и другие заголовки.

При использовании обычного обработчика эту директиву можно размещать внутри директивы <Directory> или <Location>. При использовании быстрого обработчика директива должна находиться в контексте сервера или виртуального хоста, иначе настройка будет проигнорирована.

# Enable the X-Cache-Detail header
CacheDetailHeader on
X-Cache-Detail: "conditional cache hit: entity refreshed" from localhost

Директива CacheDisable

Описание: Отключение кэширования заданных URL
Синтаксис:
CacheDisable url-string | on
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Директива CacheDisable указывает mod_cache не кэшировать URL, соответствующие url-string или находящиеся ниже него.

Пример

CacheDisable "/local_files"

При использовании в директиве <Location> путь необходимо указывать относительно Location. Если же используется слово "on", кэширование для всего расположения будет отключено.

Пример

<Location "/foo">
    CacheDisable on
</Location>

В версиях 2.2.12 и более поздних переменную окружения no-cache можно задать, чтобы отключать кэширование для более точно выбранного набора ресурсов.

См. также

  • Переменные окружения в Apache

Директива CacheEnable

Описание: Включение кэширования заданных URL с помощью указанного диспетчера хранилища
Синтаксис:
CacheEnable cache_type [url-string]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_cache
Совместимость: В версиях 2.2 и более ранних строка URL «/» применялась к содержимому прямого прокси-сервера.

Директива CacheEnable указывает mod_cache кэшировать URL, соответствующие url-string или находящиеся ниже него. Диспетчер хранилища кэша задаётся аргументом cache_type. Вместо этого директиву CacheEnable можно поместить в раздел <Location> или <LocationMatch>, чтобы указать, что содержимое можно кэшировать. Значение cache_type disk указывает mod_cache использовать дисковый диспетчер хранилища, реализованный в mod_cache_disk. Значение cache_type socache указывает mod_cache использовать диспетчер хранилища на основе кэша разделяемых объектов, реализованный в mod_cache_socache.

Если пространства URL перекрываются между разными директивами CacheEnable (как в примере ниже), будут запущены все подходящие диспетчеры хранилища до первого, который фактически обработает запрос. Порядок запуска диспетчеров хранилища определяется порядком директив CacheEnable в файле конфигурации. Директивы CacheEnable внутри разделов <Location> или <LocationMatch> обрабатываются перед глобально заданными директивами CacheEnable.

При работе в качестве сервера прямого прокси-сервера значение url-string должно как минимум начинаться с протокола, для которого следует включить кэширование.

# Cache content (normal handler only)
CacheQuickHandler off
<Location "/foo">
    CacheEnable disk
</Location>

# Cache regex (normal handler only)
CacheQuickHandler off
<LocationMatch "foo$">
    CacheEnable disk
</LocationMatch>

# Cache all but forward proxy url's (normal or quick handler)
CacheEnable  disk  /

# Cache FTP-proxied url's (normal or quick handler)
CacheEnable  disk  ftp://

# Cache forward proxy content from www.example.org (normal or quick handler)
CacheEnable  disk  http://www.example.org/

Имя узла, начинающееся с "*", соответствует всем именам узлов с таким суффиксом. Имя узла, начинающееся с ".", соответствует всем именам узлов, содержащим следующие за ним компоненты домена.

# Match www.example.org, and fooexample.org
CacheEnable  disk  "http://*example.org/"
# Match www.example.org, but not fooexample.org
CacheEnable  disk  "http://.example.org/"

В версиях 2.2.12 и более поздних переменную окружения no-cache можно задать, чтобы отключать кэширование для более точно выбранного набора ресурсов.

См. также

  • Переменные окружения в Apache

Директива CacheHeader

Описание: Добавление заголовка X-Cache в ответ.
Синтаксис:
CacheHeader on|off
Значение по умолчанию:
CacheHeader off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache
Совместимость: Доступна в Apache 2.3.9 и более поздних версиях

Если директива CacheHeader включена, в ответ добавляется заголовок X-Cache с состоянием кэша для этого ответа. При использовании обычного обработчика эту директиву можно размещать внутри директивы <Directory> или <Location>. При использовании быстрого обработчика директива должна находиться в контексте сервера или виртуального хоста, иначе настройка будет проигнорирована.

HIT
Объект был актуальным и отдан из кэша.
REVALIDATE
Объект устарел, был успешно проверен повторно и отдан из кэша.
MISS
Объект получен с вышестоящего сервера и не отдан из кэша.
# Enable the X-Cache header
CacheHeader on
X-Cache: HIT from localhost

Директива CacheIgnoreCacheControl

Описание: Игнорирование запроса не отдавать клиенту кэшированное содержимое
Синтаксис:
CacheIgnoreCacheControl On|Off
Значение по умолчанию:
CacheIgnoreCacheControl Off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache

Обычно запросы, содержащие заголовок Cache-Control: no-cache или значение Pragma: no-cache, не обслуживаются из кэша. Директива CacheIgnoreCacheControl позволяет переопределить это поведение. CacheIgnoreCacheControl On указывает серверу попытаться отдать ресурс из кэша, даже если запрос содержит значения заголовка no-cache. Ресурсы, требующие авторизации, никогда не кэшируются.

CacheIgnoreCacheControl On

Предупреждение:

Эта директива позволяет отдавать содержимое из кэша, даже если клиент запросил не отдавать документ из кэша. В результате может быть предоставлено устаревшее содержимое.

См. также

  • CacheStorePrivate
  • CacheStoreNoStore

Директива CacheIgnoreHeaders

Описание: Не сохранять указанные заголовки HTTP в кэше.
Синтаксис:
CacheIgnoreHeaders header-string [header-string] ...
Значение по умолчанию:
CacheIgnoreHeaders None
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache

Согласно RFC 2616, транзитные заголовки HTTP не сохраняются в кэше. Следующие заголовки HTTP являются транзитными и поэтому ни при каких условиях не сохраняются в кэше, независимо от значения CacheIgnoreHeaders:

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • TE
  • Trailers
  • Transfer-Encoding
  • Upgrade

CacheIgnoreHeaders задаёт дополнительные заголовки HTTP, которые не следует сохранять в кэше. Например, в некоторых случаях имеет смысл запретить сохранение файлов cookie в кэше.

CacheIgnoreHeaders принимает разделённый пробелами список заголовков HTTP, которые не следует сохранять в кэше. Если в кэше должны сохраняться только транзитные заголовки (поведение, соответствующее RFC 2616), для CacheIgnoreHeaders можно задать значение None.

Пример 1

CacheIgnoreHeaders Set-Cookie

Пример 2

CacheIgnoreHeaders None

Предупреждение:

Если заголовки, например Expires, необходимые для правильного управления кэшем, не сохраняются из-за настройки CacheIgnoreHeaders, поведение mod_cache не определено.

Директива CacheIgnoreNoLastMod

Описание: Игнорирование отсутствия в ответе заголовка Last Modified.
Синтаксис:
CacheIgnoreNoLastMod On|Off
Значение по умолчанию:
CacheIgnoreNoLastMod Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Обычно документы без даты последнего изменения не кэшируются. В некоторых случаях дата последнего изменения удаляется (например, при обработке mod_include) или вовсе не предоставляется. Директива CacheIgnoreNoLastMod позволяет указать, что документы без даты последнего изменения следует рассматривать для кэширования. Если для документа не указаны ни дата последнего изменения, ни дата истечения срока действия, дата истечения будет вычислена с использованием значения, заданного директивой CacheDefaultExpire.

CacheIgnoreNoLastMod On

Директива CacheIgnoreQueryString

Описание: Игнорирование строки запроса при кэшировании
Синтаксис:
CacheIgnoreQueryString On|Off
Значение по умолчанию:
CacheIgnoreQueryString Off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache

Обычно запросы с параметрами строки запроса кэшируются отдельно для каждой уникальной строки запроса. Согласно RFC 2616/13.9 это выполняется только в том случае, если задано время истечения срока действия. Директива CacheIgnoreQueryString указывает кэшу кэшировать запросы, даже если время истечения срока действия не задано, и отправлять кэшированный ответ, даже если строка запроса отличается. При включении этой директивы с точки зрения кэширования запрос обрабатывается так, как будто строки запроса нет.

CacheIgnoreQueryString On

Директива CacheIgnoreURLSessionIdentifiers

Описание: Игнорирование заданных идентификаторов сеанса, закодированных в URL, при кэшировании
Синтаксис:
CacheIgnoreURLSessionIdentifiers identifier [identifier] ...
Значение по умолчанию:
CacheIgnoreURLSessionIdentifiers None
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache

Иногда приложения кодируют идентификатор сеанса в URL, как в следующих примерах:

  • /someapplication/image.gif;jsessionid=123456789
  • /someapplication/image.gif?PHPSESSIONID=12345678

В результате кэшируемые ресурсы сохраняются отдельно для каждого сеанса, что часто нежелательно. CacheIgnoreURLSessionIdentifiers позволяет определить список идентификаторов, удаляемых из ключа, используемого для поиска объекта в кэше. Благодаря этому кэшируемые ресурсы не сохраняются отдельно для каждого сеанса.

Директива CacheIgnoreURLSessionIdentifiers None очищает список игнорируемых идентификаторов. В противном случае каждый идентификатор добавляется в список.

Пример 1

CacheIgnoreURLSessionIdentifiers jsessionid

Пример 2

CacheIgnoreURLSessionIdentifiers None

Директива CacheKeyBaseURL

Описание: Переопределение базового URL ключей кэша обратного прокси-сервера.
Синтаксис:
CacheKeyBaseURL URL
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache
Совместимость: Доступна в Apache 2.3.9 и более поздних версиях

Если задана директива CacheKeyBaseURL, указанный URL используется в качестве базового URL для вычисления URL ключей кэша в конфигурации обратного прокси-сервера. Если директива не задана, ключ кэша формируется с использованием схемы, имени узла и порта текущего виртуального хоста. Если используется кластер машин и все кэшированные записи должны находиться под одним и тем же ключом кэша, с помощью этой директивы можно задать новый базовый URL.

# Override the base URL of the cache key.
CacheKeyBaseURL "http://www.example.com/"
Будьте осторожны при задании этой директивы. Если двум разным виртуальным хостам случайно задать один и тот же базовый URL, записи одного виртуального хоста будут отдаваться другому.

Директива CacheLastModifiedFactor

Описание: Коэффициент для вычисления даты истечения срока действия на основе даты LastModified.
Синтаксис:
CacheLastModifiedFactor float
Значение по умолчанию:
CacheLastModifiedFactor 0.1
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Если документ не содержит дату истечения срока действия, но содержит дату последнего изменения, дату истечения можно вычислить на основе времени, прошедшего с момента последнего изменения документа. Директива CacheLastModifiedFactor задаёт коэффициент, используемый для вычисления даты истечения срока действия по следующей формуле: expiry-period = time-since-last-modified-date * factor expiry-date = current-date + expiry-period Например, если документ был изменён 10 часов назад, а коэффициент равен 0.1, период до истечения срока составит 10*0.1 = 1 час. Если текущее время — 3:00pm, вычисленная дата истечения срока действия будет 3:00pm + 1hour = 4:00pm. Если период до истечения срока окажется длиннее значения, заданного директивой CacheMaxExpire, приоритет будет у последней.

CacheLastModifiedFactor 0.5

Директива CacheLock

Описание: Включение блокировки для предотвращения наплыва запросов.
Синтаксис:
CacheLock on|off
Значение по умолчанию:
CacheLock off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache
Совместимость: Доступна в Apache 2.2.15 и более поздних версиях

Директива CacheLock включает блокировку для предотвращения наплыва запросов в указанном пространстве URL.

В минимальной конфигурации для включения такой блокировки в стандартном временном каталоге системы достаточно следующей директивы.

# Enable cache lock
CacheLock on

Директива CacheLockMaxAge

Описание: Задание максимального срока действия блокировки кэша.
Синтаксис:
CacheLockMaxAge integer
Значение по умолчанию:
CacheLockMaxAge 5
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache

Директива CacheLockMaxAge задаёт максимальный срок действия любой блокировки кэша.

Блокировка, возраст которой в секундах превышает это значение, будет проигнорирована, и следующий входящий запрос сможет создать новую блокировку. Этот механизм не позволяет медленному клиенту чрезмерно долго обновлять объект.

Директива CacheLockPath

Описание: Задание каталога для блокировок.
Синтаксис:
CacheLockPath directory
Значение по умолчанию:
CacheLockPath /tmp/mod_cache-lock
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache

Директива CacheLockPath позволяет указать каталог, в котором создаются блокировки. По умолчанию используется временный каталог системы. Блокировки представляют собой пустые файлы, существующие только для устаревших URL, находящихся в обработке, поэтому они требуют значительно меньше ресурсов, чем традиционный дисковый кэш.

Директива CacheMaxExpire

Описание: Максимальное время в секундах, в течение которого документ кэшируется
Синтаксис:
CacheMaxExpire seconds
Значение по умолчанию:
CacheMaxExpire 86400 (one day)
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Директива CacheMaxExpire задаёт максимальное количество секунд, в течение которого кэшируемые HTTP-документы будут храниться без проверки исходного сервера. Таким образом, документы устареют не позднее чем через это количество секунд. Это максимальное значение применяется, даже если в документе была указана дата истечения срока действия.

CacheMaxExpire 604800

Директива CacheMinExpire

Описание: Минимальное время в секундах, в течение которого документ кэшируется
Синтаксис:
CacheMinExpire seconds
Значение по умолчанию:
CacheMinExpire 0
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Директива CacheMinExpire задаёт минимальное количество секунд, в течение которого кэшируемые HTTP-документы будут храниться без проверки исходного сервера. Это значение используется только в том случае, если для документа не задано допустимое время истечения срока действия.

CacheMinExpire 3600

Директива CacheQuickHandler

Описание: Запускать кэш в быстром обработчике.
Синтаксис:
CacheQuickHandler on|off
Значение по умолчанию:
CacheQuickHandler on
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_cache
Совместимость: Apache HTTP Server 2.3.3 и более поздние версии

Директива CacheQuickHandler управляет этапом, на котором обрабатывается кэш.

В конфигурации по умолчанию, где эта функция включена, кэш работает на этапе быстрого обработчика. На этом этапе пропускается большая часть обработки сервера, что обеспечивает наиболее высокую производительность в типичном режиме работы сервера. Кэш подключается к началу цепочки обработки сервера, благодаря чему большая часть обработки сервера не выполняется.

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

# Run cache as a normal handler
CacheQuickHandler off

Если быстрый обработчик отключён, администратор также может выбрать точное место в цепочке фильтров, где будет выполняться кэширование, добавив в цепочку фильтр CACHE.

# Cache content before mod_include and mod_deflate
CacheQuickHandler off
AddOutputFilterByType CACHE;INCLUDES;DEFLATE text/html

Если фильтр CACHE указан несколько раз, будет применён последний экземпляр.

Директива CacheStaleOnError

Описание: Отдавать устаревшее содержимое вместо ответов 5xx.
Синтаксис:
CacheStaleOnError on|off
Значение по умолчанию:
CacheStaleOnError on
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache
Совместимость: Доступно в Apache 2.3.9 и более поздних версиях

Если директива CacheStaleOnError включена и в кэше имеются устаревшие данные, при получении от серверной части ответов 5xx кэш вернёт устаревшие данные вместо ответа 5xx. Заголовки Cache-Control, отправленные клиентами, будут учитываться, а необработанные ответы 5xx будут возвращаться клиенту по запросу, однако возвращённый клиенту ответ 5xx не приведёт к аннулированию содержимого кэша.

# Serve stale data on error.
CacheStaleOnError on

Директива CacheStoreExpired

Описание: Пытаться кэшировать ответы, которые сервер считает просроченными
Синтаксис:
CacheStoreExpired On|Off
Значение по умолчанию:
CacheStoreExpired Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Начиная с httpd 2.2.4, ответы, срок действия которых уже истёк, не сохраняются в кэше. Директива CacheStoreExpired позволяет переопределить это поведение. CacheStoreExpired On указывает серверу пытаться кэшировать ресурс, если он устарел. Последующие запросы будут инициировать запрос If-Modified-Since к исходному серверу, и ответ может быть получен из кэша, если ресурс на серверной части не изменился.

CacheStoreExpired On

Директива CacheStoreNoStore

Описание: Пытаться кэшировать запросы или ответы, помеченные как no-store.
Синтаксис:
CacheStoreNoStore On|Off
Значение по умолчанию:
CacheStoreNoStore Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Обычно запросы или ответы со значениями заголовка Cache-Control: no-store не сохраняются в кэше. Директива CacheStoreNoStore позволяет переопределить это поведение. CacheStoreNoStore On указывает серверу пытаться кэшировать ресурс, даже если он содержит значения заголовка no-store. Ресурсы, для доступа к которым требуется авторизация, никогда не кэшируются.

CacheStoreNoStore On

Предупреждение:

Как указано в RFC 2616, директива no-store предназначена для того, чтобы «предотвратить случайное раскрытие или сохранение конфиденциальной информации (например, на резервных лентах)». Включение этого параметра может привести к сохранению конфиденциальной информации в кэше. Считайте себя предупреждёнными.

См. также

  • CacheIgnoreCacheControl
  • CacheStorePrivate

Директива CacheStorePrivate

Описание: Пытаться кэшировать ответы, помеченные сервером как private
Синтаксис:
CacheStorePrivate On|Off
Значение по умолчанию:
CacheStorePrivate Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_cache

Обычно ответы со значениями заголовка Cache-Control: private не сохраняются в кэше. Директива CacheStorePrivate позволяет переопределить это поведение. CacheStorePrivate On указывает серверу пытаться кэшировать ресурс, даже если он содержит значения заголовка private. Ресурсы, для доступа к которым требуется авторизация, никогда не кэшируются.

CacheStorePrivate On

Предупреждение:

Эта директива разрешает кэширование, даже если вышестоящий сервер потребовал не кэшировать ресурс. Эта директива подходит только для «частного» кэша.

См. также

  • CacheIgnoreCacheControl
  • CacheStoreNoStore

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_cache.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API