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

Как настроить Apache2 с mod_fcgid и PHP5 на Debian Lenny

5 min read Веб-серверы Обновлено 28 Nov 2025
Apache2 + mod_fcgid + PHP5 на Debian Lenny
Apache2 + mod_fcgid + PHP5 на Debian Lenny

Важно: инструкция рассчитана на Debian Lenny и устаревшие версии PHP/Apache. На современных релизах используйте php-fpm или модуль PHP-FPM в связке с Apache/NGINX.

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

В примере используется сервер Debian Lenny с именем server1.example.com и IP 192.168.0.100. Для демонстрации создаются два виртуальных хоста: www.example1.com и www.example2.com.

Что делает mod_fcgid и зачем этот подход

mod_fcgid — совместимая альтернатива старому mod_fastcgi. Он позволяет запускать PHP-скрипты с правами владельца файлов (через suExec), а не от пользователя Apache (www-data). Это полезно при хостинге нескольких сайтов с разными владельцами.

Краткое определение: suExec — механизм безопасного запуска CGI-программ от имени конкретного пользователя сайта.

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

Выполните установку нужных пакетов:

aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

Если PHP5 уже был установлен как модуль Apache, отключите модуль php5:

a2dismod php5

Включите необходимые модули Apache:

a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod fcgid

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

vi /etc/php5/cgi/php.ini

Добавьте в конец файла строку:

[...]
cgi.fix_pathinfo = 1

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

/etc/init.d/apache2 restart

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

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

groupadd web1
groupadd web2
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2

Создаём корневые директории сайта и назначаем владельцев:

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

Почему нужен скрипт-обёртка для PHP

suExec ограничивает корневую директорию для запуска CGI (AP_DOC_ROOT). В выводе команды видно, что AP_DOC_ROOT равен /var/www, поэтому прямой запуск бинарника /usr/lib/cgi-bin/php невозможен, если он находится вне этого дерева. suExec также не позволяет использовать символьные ссылки. Решение — создать исполняемый скрипт-обёртку внутри /var/www, которая вызовет реальный CGI-исполняемый файл PHP.

План действий:

  • создать поддиректории, например /var/www/php-fcgi-scripts/web1 и /var/www/php-fcgi-scripts/web2;
  • в каждой создать исполняемый скрипт php-fcgi-starter;
  • назначить владельца и права.

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

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

Создаём скрипты-обёртки (пример для web1):

vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

И аналогично для web2:

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Пояснения:

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

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

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

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

Пример конфига для web1 (/etc/apache2/sites-available/web1):


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

  
    SuexecUserGroup web1 web1
    PHP_Fix_Pathinfo_Enable 1
    
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/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

Активируем сайт:

a2ensite web1

Аналогичный файл создаём для web2, заменив web1 на web2 и пути/пользователя соответствующим образом. Затем активируем web2:

a2ensite web2

Перезагрузите конфигурацию Apache:

/etc/init.d/apache2 reload

Проверка и тестирование

  1. Поместите тестовый файл info.php в каждую директорию сайта:
echo "" > /var/www/web1/web/info.php
echo "" > /var/www/web2/web/info.php
  1. Откройте в браузере http://www.example1.com/info.php и http://www.example2.com/info.php. В секции “Server API” должно быть указано CGI/FastCGI.

  2. Проверьте владельца процесса PHP и прав доступа: процессы должны работать от имени web1/web2.

Тесты приёмки

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

  • Оба виртуальных хоста отдают PHP-страницы корректно;
  • phpinfo() показывает CGI/FastCGI;
  • файлы обрабатываются с правами владельца сайта (не www-data);
  • логи Apache не содержат ошибок suexec при запуске CGI.

Типичные проблемы и способы их устранения

  • Ошибка suExec: проверьте AP_DOC_ROOT (должен охватывать путь к обёртке).
  • 403 Forbidden: убедитесь, что каталоги и файлы имеют корректные права и владельцев.
  • 500 Internal Server Error при запуске обёртки: проверьте права + Unix line endings и shebang (#!/bin/sh) в скрипте.
  • mod_fcgid не обрабатывает .php: проверьте AddHandler/FCGIWrapper внутри секции .

Альтернативные подходы и когда их использовать

  • mod_php (libapache2-mod-php): проще по установке, но все PHP-скрипты выполняются от пользователя Apache — меньше изоляции.
  • PHP-FPM + модуль proxy_fcgi или nginx: современное и более масштабируемое решение, рекомендуемое для новых проектов.
  • mod_fastcgi: устаревший вариант, заменён модулем mod_fcgid в большинстве дистрибутивов.

Когда mod_fcgid с suExec подходит:

  • Требуется запуск скриптов с правами владельца;
  • Несложная конфигурация для старых систем.

Когда не подходит:

  • Высокая нагрузка и необходимость масштабирования — выбирайте php-fpm;
  • Современные дистрибутивы и поддержка безопасности — чаще php-fpm предпочтительнее.

Безопасность и рекомендации по жёсткому ограничению

  • Минимизируйте права: директории 755, файлы 644; исполняемые скрипты — 755.
  • Не давайте shell-доступа пользователям сайтов (shell /bin/false задаётся в useradd).
  • Контролируйте лимиты процессов и памяти для PHP (через PHP_FCGI_CHILDREN и настройки php.ini).
  • Регулярно обновляйте пакеты на поддерживаемых релизах ОС и PHP.

Краткий словарь терминов

  • suExec — механизм Apache для запуска CGI от имени конкретного пользователя.
  • mod_fcgid — модуль Apache для запуска FastCGI-приложений.
  • FCGIWrapper — директива, назначающая путь к интерфейсу FastCGI для обработки файлов с заданным расширением.

Чек-лист для администратора перед запуском в прод

  • Проверить AP_DOC_ROOT через /usr/lib/apache2/suexec -V
  • Создать пользователей и назначить права
  • Создать и сделать исполняемыми скрипты-обёртки
  • Настроить виртуальные хосты и включить сайты
  • Перезагрузить Apache и протестировать phpinfo()
  • Настроить бэкапы и мониторинг логов

Совместимость и миграционные заметки

Debian Lenny и PHP5 — устаревшие ПО. Для миграции на современные версии рекомендуются:

  • Перенос на Debian 10/11/12 или Ubuntu LTS;
  • Переход от mod_fcgid к php-fpm и proxy_fcgi / сокетам unix;
  • Тестирование приложений на совместимость с PHP7/8.

Итог

Настройка Apache2 с mod_fcgid и PHP5 на Debian Lenny позволяет запускать PHP-скрипты с правами владельцев сайтов и подходит для окружений с разделением прав между сайтами. Тем не менее, для новых систем и высоких нагрузок стоит рассмотреть php-fpm.

Заметка: замените примеры доменов, пути и учётные записи на реальные значения перед развёртыванием в продакшн.

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

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство