Модуль Apache mod_so
| Описание: | Загрузка исполняемого кода и модулей в сервер при запуске или перезапуске |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | so_module |
| Исходный файл: | mod_so.c |
| Совместимость: | В Windows это базовый модуль (всегда включён) |
Краткое описание
В некоторых операционных системах этот модуль можно использовать для загрузки модулей в Apache HTTP Server во время работы с помощью механизма динамических разделяемых объектов (DSO), вместо необходимости перекомпиляции.
В Unix загружаемый код обычно берётся из файлов разделяемых объектов (обычно с расширением .so), а в Windows может использоваться расширение .so или .dll.
Предупреждение
Модули, собранные для одной основной версии Apache HTTP Server, как правило, не будут работать с другой версией (например, 1.3 и 2.0 или 2.0 и 2.2). Между основными версиями обычно меняется API, поэтому для работы с новой версией модули необходимо модифицировать.
Создание загружаемых модулей для Windows
Примечание
В Windows загружаемые файлы обычно имеют расширение .dll. Модули Apache httpd называются mod_whatever.so, как и на других платформах. Однако вы можете встретить сторонние модули, например PHP, в которых по-прежнему используется соглашение .dll.
Хотя mod_so по-прежнему загружает модули с именами ApacheModuleFoo.dll, предпочтительнее использовать новое соглашение об именовании. Если вы переносите загружаемый модуль на версию 2.0, исправьте его имя в соответствии с этим соглашением для версии 2.0.
API модулей Apache httpd одинаков в версиях для Unix и Windows. Многие модули работают в Windows без изменений или с небольшими изменениями по сравнению с версией для Unix, однако другие зависят от особенностей архитектуры Unix, отсутствующих в Windows, и работать не будут.
Если модуль работает, его можно добавить на сервер одним из двух способов. Как и в Unix, его можно скомпилировать в составе сервера. Поскольку в Apache httpd для Windows нет программы Configure, используемой в Apache httpd для Unix, исходный файл модуля необходимо добавить в файл проекта ApacheCore, а его символы — в файл os\win32\modules.c.
Второй способ — скомпилировать модуль как DLL, то есть разделяемую библиотеку, которую можно загрузить в сервер во время работы с помощью директивы LoadModule. Эти DLL-файлы модулей можно распространять и запускать в любой установке Apache httpd для Windows без перекомпиляции сервера.
Чтобы создать DLL-файл модуля, необходимо внести небольшое изменение в исходный файл модуля: запись модуля должна быть экспортирована из DLL (которую мы создадим далее; см. ниже). Для этого добавьте AP_MODULE_DECLARE_DATA (определённый в заголовочных файлах Apache httpd) в определение записи модуля. Например, если ваш модуль содержит:
module foo_module;
Замените приведённый выше код на:
module AP_MODULE_DECLARE_DATA foo_module;
Обратите внимание, что это изменение активируется только в Windows, поэтому при необходимости модуль можно по-прежнему использовать в Unix без изменений. Кроме того, если вы знакомы с файлами .DEF, вместо этого можно экспортировать запись модуля таким способом.
Теперь создайте DLL-файл, содержащий ваш модуль. Его нужно скомпоновать с экспортной библиотекой libhttpd.lib, которая создаётся при компиляции разделяемой библиотеки libhttpd.dll. Возможно, потребуется изменить настройки компилятора, чтобы заголовочные файлы Apache httpd находились правильно. Эту библиотеку можно найти в каталоге modules корневого каталога сервера. Лучше всего взять из дерева исходного кода файл .dsp существующего модуля, чтобы убедиться, что среда сборки настроена правильно; в качестве альтернативы можно сравнить параметры компилятора и компоновщика с параметрами в файле .dsp.
В результате должна быть создана DLL-версия вашего модуля. Поместите её в каталог modules корневого каталога сервера и используйте директиву LoadModule для её загрузки.
Директива LoadFile
| Описание: | Подключает указанный объектный файл или библиотеку |
|---|---|
| Синтаксис: | LoadFile filename [filename] ... |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_so |
Директива LoadFile подключает указанные объектные файлы или библиотеки при запуске или перезапуске сервера; она используется для загрузки дополнительного кода, который может потребоваться для работы некоторых модулей. Filename — это абсолютный путь или путь относительно ServerRoot.
Например:
LoadFile "libexec/libxmlparse.so"
Директива LoadModule
| Описание: | Подключает объектный файл или библиотеку и добавляет модуль в список активных модулей |
|---|---|
| Синтаксис: | LoadModule module filename |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_so |
Директива LoadModule подключает объектный файл или библиотеку filename и добавляет структуру модуля с именем module в список активных модулей. Module — это имя внешней переменной типа module в файле; в документации модуля она указана как идентификатор модуля.
Например:
LoadModule status_module "modules/mod_status.so"
загружает указанный модуль из подкаталога modules каталога ServerRoot.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_so.html