Spec-Zone.ru › Apache HTTP Server

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

Spec-Zone.ru

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