Guzei.com

Apache: LoadModule

Причина и решение проблемы: Invalid command LoadModule, perhaps mis-spelled or defined by a module not included in the server configuration

Статьи

© 2006, Игорь Гузей (Guzei.com)

Выводы

Новый модуль загружается командой:
LoadModule foo_module libexec/mod_foo.so
(здесь и в дальнейшем "foo" - это "нечто")
прописанной в httpd.conf

Во-первых, для загрузки модулей необходимо наличие модуля mod_so статически загруженного в Апач. Проверить его наличие можно:
1) # /.../bin/httpd -l из оболочки.
2) Вызвать функцию phpinfo() из php-скрипта.

Если модуль есть, то всё OK, а если нет, то требуется его установить
# cd /.../distrib/apache_1.3.xx
# ./configure ... --enable-module=so
# /.../bin/apachectl stop
# cp /.../distrib/apache_1.3.xx/src/httpd /.../bin/
# /.../bin/apachectl start

Во-вторых, требуется сам файл mod_foo.so в директории libexec (к примеру) текущего Апача.
# find / -name 'mod_foo.so'
Варианты:
1) Файл есть.
2) Файл есть, но не там. Используем cp куда надо.
3) Файла нет. Тогда ищем # find / -name 'mod_foo.c'. Если это стандартный модуль то он должен найтись в /.../distrib/apache_1.3.xx/src/modules/standard Если не стандартный, то где-нибудь ещё :).
cd туда
# apxs -c foo.c
И появляется нужны foo.so, который и
копируем в /.../libexec,
прописываем строку: LoadModule foo_module libexec/mod_foo.so в httpd.conf
и перегружаем Апач.

Тернии

Понадобилось включить модуль mod_rewrite на сервере Apache 1.3.xx. Казалось бы что может быть проще, чем убрать комментарий в строке
# LoadModule rewrite_module modules/mod_rewrite.so
и/или
# AddModule mod_rewrite.c
но эти строки я вижу в своём локальном Апаче, а когда заглянул на серверный, то вообще ни одной строки LoadModule не обнаружил :(.
Поиск по серверу дал положительный результат - файл mod_rewrite.c был обнаружен в стандартной директории дистрибутива Апача. Что с ним делать?
http://httpd.apache.org/docs/1.3/dso.html
Ага! 1) Компиллировать: # apxs -c foo.c
(Ага - это красиво скаазно, но это п.4. и пока до него дойдёшь внимательно читая и даже делая разные эксперименты...)
2) Копировать, в .../libexec и прописывать в httpd.conf
3) и проверять: /.../bin/apachectl configtest
Получаю:
Syntax error on line xxx of /.../conf/httpd.conf:
Invalid command 'LoadModule', perhaps mis-spelled or defined by a module not included in the server configuration
Вот это больше всего и сбивает с толку. Кажется, что не подключается тот модуль, который сейчас пытаешься подключить, а оказалось, что надо внимательнее читать секцию Implementation документа:
http://httpd.apache.org/docs/1.3/dso.html
Саме первое предложение: "The DSO support for loading individual Apache modules is based on a module named mod_so.c which has to be statically compiled into the Apache core."
В итоге на тернии с разбросом и шатанием уходит рабочий день :(.

Ссылки по теме