Модуль 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() отображены, экспериментирование, вероятно, является простейшим способом узнать об этом.
Это отображение выполняется один раз при запуске или перезапуске сервера. Поэтому всякий раз, когда один из отображенных файлов изменяется в файловой системе, вам необходимо перезапустить сервер (см. документацию по Остановке и перезапуске). Чтобы еще раз подчеркнуть этот момент: если файлы изменены на месте без перезапуска сервера, вы можете получить запросы, которые совершенно неверны. Вы должны обновить файлы, удалив старую копию и поместив новую. Большинство инструментов, таких как rdist и mv, делают это. Причина, по которой этот модуль не обрабатывает изменения файлов, заключается в том, что такой проверке потребовался бы дополнительный stat() каждый раз, что является избыточным и противоречит цели сокращения ввода-вывода.
Директива CacheFile
Директива CacheFile модуля mod_file_cache открывает активный дескриптор файла (или файлов), указанных в директиве конфигурации, и помещает эти открытые дескрипторы файлов в кэш. При запросе файла сервер извлекает дескриптор из кэша и передает его sendfile() (или TransmitFile() в Windows), API сокетов.
Кэширование дескрипторов файлов выполняется один раз при запуске или перезапуске сервера. Поэтому всякий раз, когда один из кэшированных файлов изменяется в файловой системе, вам необходимо перезапустить сервер (см. документацию по Остановке и перезапуске). Чтобы еще раз подчеркнуть этот момент: если файлы изменены на месте без перезапуска сервера, вы можете получить запросы, которые совершенно неверны. Вы должны обновить файлы, удалив старую копию и поместив новую. Большинство инструментов, таких как 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. Мы не можем сравнивать индексы или другую информацию для сопоставления путей через символические ссылки и т. д., поскольку это опять-таки потребует дополнительных 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. Мы не можем сравнивать индексы или другую информацию для сопоставления путей через символические ссылки и т. д., поскольку это опять-таки потребует дополнительных 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