Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_file_cache

Описание: Кэширует статический список файлов в памяти
Статус: Экспериментальный
Идентификатор модуля: file_cache_module
Исходный файл: mod_file_cache.c

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

Используйте этот модуль с осторожностью. С помощью mod_file_cache легко создать неисправный сайт, поэтому внимательно прочитайте этот документ.

Кэширование часто запрашиваемых файлов, которые очень редко изменяются, — это способ снизить нагрузку на сервер. mod_file_cache предоставляет два способа кэширования часто запрашиваемых статических файлов. С помощью директив конфигурации можно указать mod_file_cache либо открыть файл, а затем mmap() его, либо заранее открыть файл и сохранить его открытый дескриптор файла. Оба способа снижают нагрузку на сервер при обработке запросов к этим файлам: часть работы (а именно операции ввода-вывода с файлами) по выдаче файла выполняется при запуске сервера, а не при каждом запросе.

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

Этот модуль является расширением модуля mod_mmap_static из Apache 1.3 и во многом основан на нём.

Использование mod_file_cache

mod_file_cache кэширует список статически заданных файлов с помощью директив MMapFile или CacheFile в конфигурации главного сервера.

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

Директива MMapFile

Директива MMapFile модуля mod_file_cache отображает статически заданный список файлов в память с помощью системного вызова mmap(). Этот системный вызов доступен в большинстве современных вариантов Unix, но не во всех. Иногда существуют ограничения, зависящие от системы, на размер и количество файлов, которые можно mmap(); вероятно, проще всего выяснить это экспериментальным путём.

Это mmap() выполняется только один раз — при запуске или перезапуске сервера. Поэтому после любого изменения отображённых файлов в файловой системе необходимо перезапустить сервер (см. документацию Остановка и перезапуск). Ещё раз подчеркнём: если изменить файлы на месте, не перезапуская сервер, он может выдавать совершенно некорректные данные. Обновляйте файлы, удаляя старую копию и помещая на её место новую. Большинство инструментов, например rdist и mv, работают именно так. Модуль не отслеживает изменения файлов, потому что для такой проверки каждый раз потребовался бы дополнительный системный вызов stat(), что было бы расточительно и противоречило бы цели сокращения операций ввода-вывода.

Директива CacheFile

Директива CacheFile модуля mod_file_cache открывает активный дескриптор или файловый дескриптор для файла или файлов, указанных в директиве конфигурации, и помещает эти открытые дескрипторы в кэш. При запросе файла сервер извлекает дескриптор из кэша и передаёт его API сокетов sendfile() (или TransmitFile() в Windows).

Кэширование дескрипторов файлов выполняется только один раз — при запуске или перезапуске сервера. Поэтому после любого изменения кэшированных файлов в файловой системе необходимо перезапустить сервер (см. документацию Остановка и перезапуск). Ещё раз подчеркнём: если изменить файлы на месте, не перезапуская сервер, он может выдавать совершенно некорректные данные. Обновляйте файлы, удаляя старую копию и помещая на её место новую. Большинство инструментов, например rdist и mv, работают именно так.

Примечание

Не просите добавлять директиву для рекурсивного кэширования всех файлов в каталоге. Вместо этого попробуйте следующее... См. директиву Include и рассмотрите эту команду:

find /www/htdocs -type f -print \
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf

Директива CacheFile

Описание: Кэширует список файловых дескрипторов при запуске
Синтаксис:
CacheFile file-path [file-path] ...
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_file_cache

Директива CacheFile открывает дескрипторы одного или нескольких файлов (передаваемых в качестве аргументов, разделённых пробелами) и помещает их в кэш при запуске сервера. Дескрипторы кэшированных файлов автоматически закрываются при остановке сервера. Если файлы в файловой системе изменились, сервер следует перезапустить, чтобы снова поместить их в кэш.

Будьте внимательны с аргументами file-path: они должны в точности совпадать с путями в файловой системе, которые создают обработчики преобразования URL в имя файла Apache. Сравнивать inode и другие параметры для сопоставления путей через символические ссылки и т. д. нельзя, поскольку для этого потребовались бы дополнительные системные вызовы stat(), что неприемлемо. Этот модуль может работать или не работать с именами файлов, изменёнными с помощью mod_alias или mod_rewrite.

Пример

CacheFile /usr/local/apache/htdocs/index.html

Директива MMapFile

Описание: Отображает список файлов в память при запуске
Синтаксис:
MMapFile file-path [file-path] ...
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_file_cache

Директива MMapFile отображает один или несколько файлов (передаваемых в качестве аргументов, разделённых пробелами) в память при запуске сервера. При остановке сервера их отображение автоматически отменяется. Если файлы в файловой системе изменились, серверу следует отправить сигнал HUP или USR1, чтобы повторно выполнить mmap().

Будьте внимательны с аргументами file-path: они должны в точности совпадать с путями в файловой системе, которые создают обработчики преобразования URL в имя файла Apache. Сравнивать inode и другие параметры для сопоставления путей через символические ссылки и т. д. нельзя, поскольку для этого потребовались бы дополнительные системные вызовы stat(), что неприемлемо. Этот модуль может работать или не работать с именами файлов, изменёнными с помощью mod_alias или mod_rewrite.

Пример

MMapFile /usr/local/apache/htdocs/index.html

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

Spec-Zone.ru

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