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

Настройка PHP (FastCGI) для отдельных веб‑сайтов на Apache

4 min read Серверы Обновлено 21 Oct 2025
PHP-FastCGI на Apache — настройка и тесты
PHP-FastCGI на Apache — настройка и тесты

Важно: операции затрагивают системные файлы и службы. Выполняйте действия от пользователя с правами администратора и делайте резервные копии конфигураций.

4 Тестирование

Сначала создадим небольшой PHP‑тестовый файл на сайте, например www.example1.com.

vi /srv/www/web1/web/info.php

Затем откройте в браузере http://www.example1.com/info.php. Если всё настроено правильно, вывод будет похож на изображение ниже — в строке Server API вы увидите CGI/FastCGI.

Вывод phpinfo с указанием Server API = CGI/FastCGI

5 Отдельный php.ini для каждого веб‑сайта

Поскольку для каждого сайта используется собственный скрипт‑обёртка php-fcgi-starter, можно задавать отдельный php.ini. В примере копируем стандартный php.ini в директорию сайта /srv/www/web2/ и даём права владельца web2:web2:

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

(Теперь можно отредактировать /srv/www/web2/php.ini по своему усмотрению.)

Откройте скрипт-обёртку для сайта web2:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

и укажите путь /srv/www/web2/ в переменной PHPRC:

#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

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

systemctl restart apache2.service

Создайте файл info.php для www.example2.com:

vi /srv/www/web2/web/info.php

Откройте http://www.example2.com/info.php. В строке Loaded Configuration File должно показываться /srv/www/web2/php.ini.

phpinfo показывающий путь к загруженному php.ini в /srv/www/web2

6 Изменение отдельных параметров PHP

Вместо передачи целого php.ini можно изменить отдельные настройки прямо в скрипте-обёртке, добавив ключ -d к PHP‑исполняемому файлу. Например, чтобы отключить magic_quotes_gpc для сайта www.example2.com, отредактируйте скрипт:

vi /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 -d magic_quotes_gpc=off

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

systemctl restart apache2.service

Затем снова откройте info.php в браузере и найдите строку magic_quotes_gpc — теперь она должна показывать Off.

phpinfo показывающий magic_quotes_gpc = Off

Ключевые параметры и числа

  • PHP_FCGI_MAX_REQUESTS — примерное значение в примерах: 5000.
  • PHP_FCGI_CHILDREN — число дочерних процессов в примерах: 8.

Эти значения служат для иллюстрации и могут быть адаптированы под нагрузку вашего сервера.

Когда использовать отдельный php.ini, а когда флаг -d

  • Отдельный php.ini удобен, когда нужно поменять множество настроек или использовать разные расширения для сайта.
  • Флаг -d подходит для быстрой правки одной‑двух директив без копирования целого файла.
flowchart TD
  A[Нужно изменить настройки PHP?] --> B{Много настроек или разные расширения?}
  B -- Да --> C[Создать отдельный php.ini в корне сайта и задать PHPRC]
  B -- Нет --> D[Добавить ключи -d в php-fcgi-starter]
  C --> E[Перезапустить Apache и проверить phpinfo]
  D --> E

Альтернативные подходы

  • PHP‑FPM с пулом на сайт: современная альтернатива FastCGI/mod_fcgid, позволяет более гибко управлять процессами.
  • Запуск через systemd‑сервисы с конфигурацией per‑pool — применимо, если требуется изоляция с учётом ресурсов.

Контрольный список ролей

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

    • Сделать резервные копии /etc/php5/fastcgi/php.ini и скриптов php-fcgi-starter.
    • Корректно выставить права и владельца для файлов php.ini в каталоге сайта.
    • Перезапустить Apache и проверить логи (error.log, access.log).
  • Веб‑разработчик:

    • Указать необходимые директивы и расширения в php.ini или через -d.
    • Проверить совместимость приложений с изменёнными настройками.

Простая методология тестирования (шаги)

  1. Создать info.php с phpinfo().
  2. Открыть файл в браузере и посмотреть Server API и Loaded Configuration File.
  3. Изменить php.ini или добавить -d, перезапустить Apache.
  4. Повторно открыть info.php и проверить изменения.
  5. Проверить логи Apache и PHP при ошибках.

Устранение неполадок — быстрый план действий

  1. Если в phpinfo() не отображается CGI/FastCGI — проверьте, что Apache использует модуль mod_fcgid или настроен соответствующим образом.
  2. Если Loaded Configuration File не тот, какой ожидали — проверьте переменную PHPRC в скрипте php-fcgi-starter и права доступа к файлу php.ini.
  3. Если изменения через -d не применяются — убедитесь, что вы перезапустили Apache и что вы редактируете правильный скрипт для нужного сайта.
  4. При ошибках в php.ini верните предыдущую версию из резервной копии и перезапустите службу.

Примеры тест‑кейсов и критерии приёмки

  • Тест‑кейс: info.php показывает Server API = CGI/FastCGI.
    • Критерии приёмки: страница загружается без ошибки 500, поле Server API показывает CGI/FastCGI.
  • Тест‑кейс: сайт использует собственный php.ini.
    • Критерии приёмки: Loaded Configuration File указывает на /srv/www//php.ini и директивы в нём активны.
  • Тест‑кейс: изменение через -d применено.
    • Критерии приёмки: соответствующая директива в phpinfo() отображается с ожидаемым значением.

Полезные ссылки

Итог

Настройка PHP через FastCGI позволяет изолировать конфигурации для каждого сайта и гибко управлять параметрами. Для быстрых изменений используйте флаг -d, для большого числа правок — отдельный php.ini. Всегда проверяйте результат через phpinfo() и следите за логами.

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

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

Charging On Hold на MacBook — быстрое решение
Руководства

Charging On Hold на MacBook — быстрое решение

Как получить соты в Minecraft — руководство
Minecraft

Как получить соты в Minecraft — руководство

Удалить голосовые записи Alexa — инструкция
Конфиденциальность

Удалить голосовые записи Alexa — инструкция

Как удалить архив в Messenger
Социальные сети

Как удалить архив в Messenger

COUNTBLANK в Google Sheets — считать пустые ячейки
Google Sheets

COUNTBLANK в Google Sheets — считать пустые ячейки

История буфера обмена в ChromeOS — быстрое руководство
ChromeOS

История буфера обмена в ChromeOS — быстрое руководство