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

Как настроить Apache2 с mod_fcgid и PHP5 на Fedora 11

• 4 min read • Серверы • Обновлено 23 Nov 2025
Настройка Apache2 с mod_fcgid и PHP5 на Fedora 11
Настройка Apache2 с mod_fcgid и PHP5 на Fedora 11

Введение

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

Важно: перед началом убедитесь, что SELinux отключён, иначе некоторые шаги не сработают.

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

1. Предварительная проверка и отключение SELinux

Откройте файл конфигурации SELinux и установите режим disabled:

vi /etc/selinux/config

Найдите и установите:

SELINUX=disabled
SELINUXTYPE=targeted

Чтобы изменения вступили в силу, выполните:

setenforce 0

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

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

yum install httpd mod_fcgid php-cli

Если PHP уже был установлен как модуль Apache (libphp5.so), отключите модуль — откройте файл /etc/httpd/conf.d/php.conf и закомментируйте всё содержимое, например так:

vi /etc/httpd/conf.d/php.conf
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
#
#  LoadModule php5_module modules/libphp5.so
#
#
#  LoadModule php5_module modules/libphp5-zts.so
#

#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
#DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

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

chkconfig --levels 235 httpd on
/etc/init.d/httpd restart

Откройте /etc/php.ini и добавьте в конец файла:

vi /etc/php.ini
[...]
cgi.fix_pathinfo = 1

Перезагрузите Apache:

/etc/init.d/httpd reload

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

Мы создадим два сайта с корнями /var/www/web1/web и /var/www/web2/web. Первый будет принадлежать web1:web1, второй — web2:web2.

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

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
chmod 755 /var/www/web1
chmod 755 /var/www/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

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

suExec ограничивает исполняемые пути документом-рутом (AP_DOC_ROOT). Выполнение /usr/bin/php-cgi напрямую не допускается, если он находится вне /var/www. Поскольку suExec запрещает символические ссылки, создаём обёртки (wrapper) внутри /var/www, которые будут запускать системный php-cgi. Каждая обёртка должна принадлежать соответствующему пользователю сайта.

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

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

Создаём starter-скрипты:

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

Коротко о переменных: PHPRC указывает каталог с php.ini (здесь /etc/). 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

Настройка виртуальных хостов

Добавьте следующие vhost’ы в конец /etc/httpd/conf/httpd.conf (проверьте пути и замените email, если нужно):

vi /etc/httpd/conf/httpd.conf
[...]
NameVirtualHost *:80


  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




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

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

После изменения конфигурации перезагрузите Apache:

/etc/init.d/httpd reload

Проверки и отладка

  1. Убедитесь, что модуль mod_fcgid загружен: проверьте вывод httpd -M или apachectl -M.
  2. Проверить права файлов и владельцев директорий — скрипты должны принадлежать web1:web1 или web2:web2.
  3. Журналы: /var/log/httpd/error_log и /var/log/httpd/access_log, а также /var/log/httpd/suexec.log (если включён) — первые источники информации при ошибках.
  4. Тестовый PHP-файл: положите в документ-рут простой info.php с и откройте его в браузере.

Распространённые ошибки и решения

  • 403 Forbidden при попытке выполнить .php: проверьте Options +ExecCGI и права доступа в каталоге, а также отсутствие deny-by-default в конфигурации.
  • PHP не выполняется, скачивается как файл: проверьте AddHandler и FCGIWrapper, убедитесь, что модуль mod_fcgid активен.
  • Ошибки suexec: проверьте, что путь к обёртке находится в пределах AP_DOC_ROOT (/var/www) и что скрипт принадлежит нужному пользователю и имеет права 755.

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

  • При открытии тестового info.php в браузере отображается страница phpinfo().
  • Процессы PHP запускаются от имени соответствующих пользователей web1 или web2 (проверка ps aux | grep php-cgi).
  • Логи Apache и suexec не содержат критических ошибок при простом запросе.

Методология (коротко)

  1. Подготовить среду (SELinux, пакеты). 2. Заблокировать встроенный PHP-модуль. 3. Создать пользователей и деревья каталогов. 4. Создать suExec-совместимые обёртки для php-cgi. 5. Настроить vhost’ы с FCGIWrapper. 6. Проверить и отладить.

Чеклист перед продакшеном

  • SELinux отключён или настроен корретно.
  • Установлены httpd, mod_fcgid, php-cli.
  • Отключён libphp5 как модуль Apache, если используется mod_fcgid.
  • Обёртки php-fcgi-starter находятся в /var/www и принадлежат правильным пользователям.
  • Права и владельцы каталогов корректны (не writable для всех).
  • Журналы логов доступны и ротация настроена.
  • Тестовое phpinfo отображается корректно.

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

  • Запускайте PHP-процессы под отдельными пользователями для каждого виртуального хоста — это ограничит доступ между сайтами.
  • Не давайте каталогам веб-сайтов права на запись для всех; используйте минимально необходимые права.
  • Настройте ротацию логов и мониторинг ошибок.
  • Рассмотрите ограничение доступа к /var/www/php-fcgi-scripts/ и проверяйте содержимое starter-скриптов.

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

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

Вывод

Настройка Apache2 с mod_fcgid и PHP5 на Fedora 11 даёт вам гибкость и безопасность за счёт запуска PHP-процессов под владельцами сайтов. Внимательно проверьте пути для suExec, права на файлы и конфигурацию vhost’ов. После базовой настройки выполните тесты и настройте мониторинг.

Важно: если ваша система использует современные версии ОС или 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 быстро