Модуль 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 кэшируемого ответа. Можно одновременно хранить несколько согласованных по содержимому ответов, однако этот модуль не поддерживает кэширование частичного содержимого.
Дополнительные сведения, обсуждение и примеры приведены в руководстве по кэшированию.
Связанные модули и директивы
| Связанные модули | Связанные директивы |
|---|---|
Пример конфигурации
Пример 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 можно задать, чтобы отключать кэширование для более точно выбранного набора ресурсов.
См. также
Директива 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 можно задать, чтобы отключать кэширование для более точно выбранного набора ресурсов.
См. также
Директива 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
Предупреждение:
Эта директива позволяет отдавать содержимое из кэша, даже если клиент запросил не отдавать документ из кэша. В результате может быть предоставлено устаревшее содержимое.См. также
Директива CacheIgnoreHeaders
| Описание: | Не сохранять указанные заголовки HTTP в кэше. |
|---|---|
| Синтаксис: | CacheIgnoreHeaders header-string [header-string] ... |
| Значение по умолчанию: | CacheIgnoreHeaders None |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_cache |
Согласно RFC 2616, транзитные заголовки HTTP не сохраняются в кэше. Следующие заголовки HTTP являются транзитными и поэтому ни при каких условиях не сохраняются в кэше, независимо от значения CacheIgnoreHeaders:
ConnectionKeep-AliveProxy-AuthenticateProxy-AuthorizationTETrailersTransfer-EncodingUpgrade
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/"
Директива 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 предназначена для того, чтобы «предотвратить случайное раскрытие или сохранение конфиденциальной информации (например, на резервных лентах)». Включение этого параметра может привести к сохранению конфиденциальной информации в кэше. Считайте себя предупреждёнными.См. также
Директива CacheStorePrivate
| Описание: | Пытаться кэшировать ответы, помеченные сервером как private |
|---|---|
| Синтаксис: | CacheStorePrivate On|Off |
| Значение по умолчанию: | CacheStorePrivate Off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Статус: | Расширение |
| Модуль: | mod_cache |
Обычно ответы со значениями заголовка Cache-Control: private не сохраняются в кэше. Директива CacheStorePrivate позволяет переопределить это поведение. CacheStorePrivate On указывает серверу пытаться кэшировать ресурс, даже если он содержит значения заголовка private. Ресурсы, для доступа к которым требуется авторизация, никогда не кэшируются.
CacheStorePrivate On
Предупреждение:
Эта директива разрешает кэширование, даже если вышестоящий сервер потребовал не кэшировать ресурс. Эта директива подходит только для «частного» кэша.См. также
© 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