Как собрать mod_fastcgi для Apache2 на OpenSUSE 12.2
Версия 1.0
Автор: Falko Timme
Следите за автором в Twitter
Задача и почему это нужно
mod_fastcgi требуется для совместной работы старых версий Apache (до 2.4) с PHP-FPM. В пакете apache2-mod_fastcgi для OpenSUSE есть баг: он запрещает использование директивы FastCgiExternalServer внутри секции VirtualHost, хотя официальная документация mod_fastcgi разрешает это. В результате Apache отказывается стартовать с конфигурацией, где FastCgiExternalServer задан в vhost.
Короткий пример ошибки при проверке конфигурации:
apache2ctl -tИ вывод:
server1:/etc/apache2/sites-available # apache2ctl -t
Syntax error on line 57 of /etc/apache2/sites-enabled/100-example.com.vhost:
FastCgiExternalServer cannot occur within section
server1:/etc/apache2/sites-available # Официальная документация mod_fastcgi указывает, что FastCgiExternalServer можно использовать как в глобальной конфигурации, так и в конфигурации виртуальных хостов. Поэтому корректный путь — собрать модуль самостоятельно из исходников и установить его вместо проблемного пакета.
Что нужно заранее
- Рабочая система OpenSUSE 12.2.
- Права root (или sudo) для установки пакетов и перезапуска Apache.
- Рекомендуется сохранить резервную копию текущего /etc/apache2 перед изменениями.
Важно: я не даю гарантий, что инструкция подойдёт во всех окружениях. Она описывает практику, проверенную на OpenSUSE 12.2 в типичной конфигурации Apache2.
Подготовка
Убедитесь, что установлен пакет разработки для Apache2:
zypper install apache2-develЕсли у вас уже установлен apache2-mod_fastcgi через zypper, можно сохранить его RPM или пометить пакет как удалённый перед заменой. Опция удаления зависит от вашей политики управления пакетами.
Скачивание и сборка mod_fastcgi
- Скачайте исходники и распакуйте их:
wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
tar xvfz mod_fastcgi-2.4.6.tar.gz
cd mod_fastcgi-2.4.6/- Скопируйте Makefile для Apache 2:
cp Makefile.AP2 Makefile- Создайте симлинк к заголовочному файлу MPM (если он отсутствует):
ln -s /usr/include/apache2-worker/mpm.h /usr/include/apache2/- Скомпилируйте и установите модуль, указывая каталог верхнего уровня Apache:
make top_dir=/usr/share/apache2
make top_dir=/usr/share/apache2 installЭти команды создадут модуль mod_fastcgi.so и поместят его в каталог модулей Apache.
Проверка загрузки модуля
Убедитесь, что в конфигурации Apache присутствует строка загрузки модуля:
LoadModule fastcgi_module modules/mod_fastcgi.soОбычно эту строку добавляют в файл /etc/apache2/sysconfig.d/loadmodule.conf.
После этого перезапустите Apache:
/etc/init.d/apache2 restartЕсли Apache успешно перезапускается, значит вы заменили модуль OpenSUSE на собственный собранный модуль.
Отладка и типичные проблемы
- Ошибка компиляции из-за отсутствующих заголовков: убедитесь, что apache2-devel установлен и симлинки созданы правильно.
- Конфликт версий MPM: mod_fastcgi нужно собирать для той реализации MPM, которую использует ваш Apache (worker/event/prefork). Проверьте текущий MPM и заголовочные файлы в /usr/include/apache2*.
- Если после установки Apache не стартует, посмотрите журнал ошибок: /var/log/apache2/error_log или соответствующий для вашей системы.
Важно: если вы используете пакетный менеджер, помните — он не будет знать о вручную установленном модуле. Обновления системы могут перезаписать файлы или вставить конфликтные версии.
Альтернативы и рекомендации
- Использовать Apache 2.4 и модуль mod_proxy_fcgi (рекомендуется для новых установок).
- Если возможно, переключиться на поставляемые дистрибутивом пакеты, но при проблемах — собрать модуль вручную, как показано выше.
- Рассмотрите использование контейнеризации (Docker) или виртуальных машин для изоляции устаревших стеков.
Краткая методология (чеклист)
- Сделать резервную копию /etc/apache2.
- Установить apache2-devel.
- Скачать и распаковать исходники mod_fastcgi.
- Применить Makefile.AP2 → Makefile.
- Создать симлинк mpm.h в /usr/include/apache2 при необходимости.
- Выполнить make и make install с top_dir=/usr/share/apache2.
- Добавить LoadModule в /etc/apache2/sysconfig.d/loadmodule.conf.
- Перезапустить Apache и проверить конфигурацию apache2ctl -t.
Когда это не сработает
- Ваш Apache использует несовместимый MPM или сильно модифицированную сборку.
- Система получила обновление, которое заменяет файлы модулей на версии из репозиториев. В этом случае стоит создать пакет RPM из собранного модуля и установить его через zypper, чтобы пакетный менеджер «видел» модуль.
Советы по безопасности
- Не собирайте двоичные файлы под учётной записью root без крайней необходимости.
- Проверяйте права на модуль и конфигурационные файлы.
- Поддерживайте актуальность PHP-FPM и Apache, по возможности мигрируйте на поддерживаемые версии.
Часто задаваемые вопросы
Можно ли собрать модуль и оставить пакет apache2-mod_fastcgi установленным?
Да, но это может привести к конфликтам. Если вы устанавливаете модуль вручную, удалите или отключите пакетный модуль, чтобы избежать дублирования.
Подойдёт ли эта инструкция для OpenSUSE более новых версий?
Принцип тот же, но пути, пакеты и MPM-заголовки могут отличаться. На новых версиях лучше использовать модуль mod_proxy_fcgi и Apache 2.4+.
Ссылки
- Apache: http://httpd.apache.org/
- Документация mod_fastcgi: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
- OpenSUSE: http://www.opensuse.org/
Итого: при проблеме с директивой FastCgiExternalServer в vhost на OpenSUSE 12.2 сборка mod_fastcgi из исходников — рабочий путь. Следуйте чеклисту, проверяйте логи и по возможности планируйте миграцию на современные модули и версии Apache.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента