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

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

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

Предварительная заметка

В примере используется сервер OpenSUSE 11.2 с именем host server1.example.com и IP 192.168.0.100.

Мы создаём два виртуальных хоста: www.example1.com и www.example2.com, чтобы продемонстрировать работу mod_fcgid с разными пользователями веб-сайтов.

Важное: все команды выполняются от пользователя с правами root или через sudo.

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

Установите необходимые пакеты:

yast2 -i apache2 apache2-mod_fcgid php5-fastcgi

Если PHP ранее был подключён как модуль Apache, отключите модуль php5:

a2dismod php5

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

a2enmod suexec
a2enmod fcgid

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

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

Откройте конфигурационный php.ini для FastCGI и убедитесь, что включено исправление PATH_INFO:

vi /etc/php5/fastcgi/php.ini

Найдите и раскомментируйте строку:

cgi.fix_pathinfo=1

(В исходнике php.ini это выглядит как часть блока с объяснением; цель — чтобы PHP CGI соответствовал спецификации PATH_INFO.)

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

/etc/init.d/apache2 restart

Создание пользователей, директорий и обёрток для PHP

В этом сценарии каждый сайт работает под своим системным пользователем: web1 и web2. Создайте группы и пользователей, настройте права:

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

Проверьте настройки suExec — корень для suExec должен быть /srv/www. Вывод утилиты показывает это:

/usr/sbin/suexec2 -V

Пример вывода:

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 находится вне AP_DOC_ROOT, suExec не позволит запускать его напрямую. Решение — создать скрипт-обёртку внутри дерева /srv/www, который будет запускать /usr/bin/php-cgi. Для каждого сайта — своя обёртка, принадлежащая соответствующему пользователю.

Создайте каталоги для обёрток:

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

Создайте содержимое файлов-обёрток (пример для web1 и 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

И аналогично для web2 в /srv/www/php-fcgi-scripts/web2/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

Объяснение переменных:

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

Сделайте скрипты исполняемыми и установите владельцев:

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

Конфигурация виртуальных хостов

Создайте файл виртуального хоста для 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 в /etc/apache2/vhosts.d/www.example2.com.conf:


  ServerName www.example2.com
  ServerAlias example2.com
  ServerAdmin [email protected]
  DocumentRoot /srv/www/web2/web/

  
    SuexecUserGroup web2 web2
    PHP_Fix_Pathinfo_Enable 1
    
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /srv/www/php-fcgi-scripts/web2/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

Убедитесь, что пути и значения SuexecUserGroup соответствуют созданным пользователям и каталогам.

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

vi /etc/apache2/httpd.conf

Добавьте/проверьте:

NameVirtualHost *

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

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

chmod 4755 /usr/sbin/suexec2

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

/etc/init.d/apache2 restart

Мини-методология (быстрая последовательность действий)

  1. Установить apache2, модуль fcgid и php5-fastcgi.
  2. Отключить php5 как модуль Apache, включить suexec и fcgid.
  3. Создать системных пользователей и каталоги для сайтов.
  4. Создать скрипты-обёртки в дереве /srv/www и дать им владельца сайта.
  5. Настроить виртуальные хосты с FCGIWrapper и SuexecUserGroup.
  6. Провести тесты и перезапустить Apache.

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

Администратор:

  • Установлены пакеты: apache2, apache2-mod_fcgid, php5-fastcgi.
  • a2dismod php5 выполнен (если применимо).
  • a2enmod suexec и a2enmod fcgid выполнены.
  • Скрипты-обёртки созданы в /srv/www и принадлежат нужным пользователям.
  • Права на /usr/sbin/suexec2 выставлены 4755.
  • В httpd.conf добавлен NameVirtualHost * и выполнен перезапуск.

Разработчик / владелец сайта:

  • Контент сайта размещён в /srv/www//web.
  • Файлы и каталоги принадлежат соответствующему пользователю (web1 или web2).
  • PHP-скрипты корректно обрабатываются (проверка phpinfo()).

Шпаргалка команд (сводка)

  • Установка: yast2 -i apache2 apache2-mod_fcgid php5-fastcgi
  • Отключить модуль: a2dismod php5
  • Включить модули: a2enmod suexec; a2enmod fcgid
  • Права suExec: chmod 4755 /usr/sbin/suexec2
  • Перезапуск Apache: /etc/init.d/apache2 restart

Типичные проблемы и как их решать

  • Ошибка: “SuexecUserGroup directive requires SUEXEC wrapper.” — Решение: выставьте suExec-бит: chmod 4755 /usr/sbin/suexec2.

  • PHP не запускается или возвращает 500 — Проверьте: права на скрипт-обёртку, владельца, наличие флага ExecCGI в директиве Directory, а также логи /var/log/apache2/error.log и /var/log/apache2/suexec.log.

  • Скрипты не видят правильный PATH_INFO — Убедитесь, что в /etc/php5/fastcgi/php.ini установлено cgi.fix_pathinfo=1 и в конфигурации хоста включён PHP_Fix_Pathinfo_Enable 1.

  • Если FCGIWrapper указывает на файл вне /srv/www — suExec не позволит запуск. Поместите обёртку внутри AP_DOC_ROOT (/srv/www).

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

  • Никогда не делайте скрипты-обёртки исполняемыми глобально; их владельцем должен быть только соответствующий пользователь сайта.
  • Ограничьте AllowOverride только там, где действительно нужно; чрезмерное использование .htaccess может привести к уязвимостям.
  • Логи suexec полезны для отладки прав — /var/log/apache2/suexec.log.

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

  • Два сайта (www.example1.com и www.example2.com) отвечают и отдают свои страницы.
  • PHP-скрипт phpinfo() показывает корректную конфигурацию FastCGI и путь к php.ini /etc/php5/fastcgi/php.ini.
  • Процессы PHP выполняются под владельцами web1 и web2, а не под пользователем Apache.
  • Нет предупреждений suexec при перезапуске Apache.

Глоссарий (одна строка)

  • suExec — механизм Apache для безопасного запуска CGI-программ от имени конкретного пользователя; обеспечивает изоляцию процессов.

Короткое резюме

Вы настроили Apache2 с mod_fcgid и PHP5 на OpenSUSE 11.2 так, чтобы PHP скрипты выполнялись под учётными записями владельцев сайтов. Это повышает безопасность и разделение прав между сайтами. Следуйте чеклистам и проверяйте логи при отладке.

Поделиться: 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 быстро