Гид по технологиям

Установка Apache2 с mod_fcgid и PHP5 на OpenSUSE 11.3

• 4 min read • Серверы • Обновлено 17 Nov 2025
Apache2 + mod_fcgid и PHP5 на OpenSUSE 11.3
Apache2 + mod_fcgid и PHP5 на OpenSUSE 11.3

Предварительное примечание

В примерах использован сервер OpenSUSE 11.3 с именем host server1.example.com и IP 192.168.0.100. Для демонстрации будут созданы два виртуальных хоста: www.example1.com и www.example2.com. Документы сайтов расположены в /srv/www/web1/web и /srv/www/web2/web соответственно.

Важно: mod_fcgid — это совместимая альтернатива старому mod_fastcgi. Он позволяет запускать PHP-скрипты с правами владельца файлов, а не от пользователя Apache.

Установка Apache2, mod_fcgid и PHP5

Установите пакеты с помощью YaST/CLI:

yast2 -i apache2 apache2-mod_fcgid php5-fastcgi

Если PHP уже подключён как модуль Apache, отключите его:

a2dismod php5

Включите модули suexec и fcgid:

a2enmod suexec
a2enmod fcgid

Создайте запускные скрипты для сервиса Apache и запустите его:

chkconfig --add apache2
/etc/init.d/apache2 start

Откройте файл настроек fastcgi-PHP:

vi /etc/php5/fastcgi/php.ini

Раскомментируйте и установите:

[...]
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]

Перезапустите Apache:

/etc/init.d/apache2 restart

Создание пользователей, директорий и wrapper-скриптов

Мы будем запускать PHP через suExec. suExec ограничивает корневую директорию для исполняемых файлов. В примере suExec настроен на /srv/www, что видно в выводе:

server1:~ # /usr/sbin/suexec2 -V
 -D AP_DOC_ROOT='/srv/www'
 -D AP_GID_MIN=96
 -D AP_HTTPD_USER='wwwrun'
 -D AP_LOG_EXEC='/var/log/apache2/suexec.log'
 -D AP_SAFE_PATH='/usr/local/bin:/usr/bin:/bin'
 -D AP_UID_MIN=96
 -D AP_USERDIR_SUFFIX='public_html'
server1:~ #

Поскольку /usr/bin/php-cgi находится вне корня suExec, нельзя вызывать бинарник напрямую из конфигурации vhost. Решение — создать wrapper-скрипт внутри /srv/www, который будет запускать /usr/bin/php-cgi. Для каждого сайта нужен свой скрипт, принадлежащий соответствующему пользователю.

Создаём группы и пользователей сайтов, создаём корни документов:

groupadd web1
groupadd web2
useradd -s /bin/false -d /srv/www/web1 -m -g web1 web1
useradd -s /bin/false -d /srv/www/web2 -m -g web2 web2
chmod 755 /srv/www/web1
chmod 755 /srv/www/web2

Создаём директории для документов и назначаем владельцев:

mkdir -p /srv/www/web1/web
chown web1:web1 /srv/www/web1/web
mkdir -p /srv/www/web2/web
chown web2:web2 /srv/www/web2/web

Создаём директории для fcgid-wrapper’ов и сами стартеры:

mkdir -p /srv/www/php-fcgi-scripts/web1
mkdir -p /srv/www/php-fcgi-scripts/web2

Файл /srv/www/php-fcgi-scripts/web1/php-fcgi-starter:

#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Файл /srv/www/php-fcgi-scripts/web2/php-fcgi-starter аналогичен.

Назначьте права и владельцев:

chmod 755 /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /srv/www/php-fcgi-scripts/web1
chown -R web2:web2 /srv/www/php-fcgi-scripts/web2

Пояснения по переменным среды в стартере:

  • PHPRC — директория, где лежит php.ini для fastcgi (здесь /etc/php5/fastcgi/).
  • PHP_FCGI_MAX_REQUESTS — максимальное число обработанных запросов дочерним процессом перед перезапуском.
  • PHP_FCGI_CHILDREN — количество дочерних процессов PHP в рамках одного запускающего процесса.

Настройки этих параметров зависят от нагрузки и объёма памяти на сервере.

Создание виртуальных хостов

Пример конфигурации для www.example1.com (/etc/apache2/vhosts.d/www.example1.com.conf):


  ServerName www.example1.com
  ServerAlias example1.com
  ServerAdmin [email protected]
  DocumentRoot /srv/www/web1/web/

  
    SuexecUserGroup web1 web1
    PHP_Fix_Pathinfo_Enable 1
    
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    
  

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

Аналогично для www.example2.com с заменой web1 → web2 и путей на /srv/www/web2/web.

Откройте /etc/apache2/httpd.conf и убедитесь, что перед включением vhosts стоит строка NameVirtualHost *:

NameVirtualHost *

Include /etc/apache2/vhosts.d/*.conf

Перед перезапуском Apache исправьте права suExec-исполняемого файла, иначе вы увидите предупреждение о необходимости SUEXEC wrapper:

chmod 4755 /usr/sbin/suexec2

Перезапустите Apache:

/etc/init.d/apache2 restart

Отладка и проверка

  1. Проверьте, что модуль fcgid загружен:
apache2ctl -M | grep fcgid
  1. Проверьте, что suExec функционирует без ошибок в логах: /var/log/apache2/suexec.log и /var/log/apache2/error.log.

  2. Создайте простой phpinfo-скрипт в каждом DocumentRoot и откройте в браузере:

  1. Если видите ошибки 500, проверьте: права файлов/папок, владельца wrapper-скрипта, наличие исполняемого бина /usr/bin/php-cgi и правильность PHPRC.

Частые причины ошибок:

  • wrapper-скрипт не исполняемый или принадлежит не тому пользователю;
  • путь к php-cgi указан неверно;
  • suExec блокирует путь: убедитесь, что wrapper находится в дереве /srv/www;
  • директивы Allow/Order в старых версиях Apache настроены некорректно.

Безопасность и рекомендации

  • Всегда держите wrapper-скрипты и директории с ними принадлежащими соответствующему владельцу сайта и правами 755.
  • Не помещайте исполняемые файлы вне корня suExec.
  • Ограничьте PHP_FCGI_CHILDREN и PHP_FCGI_MAX_REQUESTS в соответствии с памятью сервера.
  • Отключите отображение ServerSignature и проброс ошибок в браузер (display_errors=Off) для продакшена.
  • Используйте AllowOverride только когда действительно нужно; альтернативно применяйте настройки в конфигурации vhost.

Когда этот подход не подходит и альтернативы

Когда стоит рассмотреть альтернативы:

  • На новых дистрибутивах и для высоконагруженных приложений лучше использовать php-fpm + mod_proxy_fcgi: производительнее и проще в настройке пулов процессов.
  • Если нужно быстрое масштабирование и контейнеризация — применять php-fpm и сокеты/Unix domain sockets.

Короткое сравнение:

  • mod_fcgid + suExec: хорошо для запуска PHP с правами владельца, простая изоляция на уровне ОС.
  • php-fpm + mod_proxy_fcgi: гибкие пулы, лучшее управление ресурсами, более современная архитектура.

Критерии приёмки

  • Apache стартует без ошибок и модули fcgid/suexec загружены.
  • phpinfo.php отображается корректно для каждого виртуального хоста и показывает, что PHP работает через CGI/FastCGI.
  • Процессы PHP запущены от пользователей web1 и web2 соответственно (проверьте ps aux или lsof).
  • Логи не содержат ошибок suExec и fcgid при обработке простых запросов.

Чеклист для ролей

Системный администратор:

  • Установил пакеты и включил модули.
  • Настроил права для /usr/sbin/suexec2 и wrapper-скриптов.
  • Перезапустил Apache и проверил логи.

Разработчик:

  • Добавил phpinfo.php и проверил конфигурацию PHP (php.ini) для fastcgi.
  • Проверил корректность PATH_INFO в приложении.

Аудитор безопасности:

  • Проверил права на каталоги и скрипты.
  • Убедился, что display_errors отключён и ServerSignature Off.

Краткая методология внедрения

  1. Установить пакеты и отключить модуль PHP для Apache.
  2. Включить suexec и fcgid, настроить php.ini для fastcgi.
  3. Создать пользователей, директории и wrapper-скрипты в корне suExec.
  4. Настроить виртуальные хосты с FCGIWrapper и SuexecUserGroup.
  5. Проверить работу и настроить параметры производительности.

Итог

Следуя этой инструкции, вы получите рабочую конфигурацию Apache2 + mod_fcgid + PHP5 на OpenSUSE 11.3, где PHP-скрипты исполняются с правами владельца сайтов. Это обеспечивает лучшую изоляцию приложений и совместимость с устаревшими сценариями, при этом требует аккуратной настройки прав и контроля процессов.

Важное: рассмотрите переход на php-fpm для современных развертываний и высокой нагрузки.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро