Модуль 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