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

Настройка PHP-FastCGI для сайтов — тестирование и кастомные php.ini

• 4 min read • Серверы • Обновлено 18 Nov 2025
PHP-FastCGI: тестирование и кастомный php.ini
PHP-FastCGI: тестирование и кастомный php.ini

Краткое содержание

Кратко: покажу, как протестировать запуск PHP через FastCGI/CGI, как назначать индивидуальные php.ini для сайтов и как менять отдельные параметры PHP через обёртку php-fcgi-starter. Приведены чек-листы, типичные ошибки и пошаговый план.

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

Создадим небольшой PHP-файл для теста в каталоге сайта, например для www.example1.com:

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

Вставьте в файл:

Затем откройте этот файл в браузере по адресу http://www.example1.com/info.php. Если всё настроено верно, на странице phpinfo() в строке Server API будет указано CGI/FastCGI.

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

Важно: если вы не видите CGI/FastCGI, проверьте, что ваш php-fcgi-starter действительно запускает php-cgi, и что Apache использует модуль mod_fcgid или аналогичный.

2 Кастомный php.ini для каждого сайта

Преимущество обёртки php-fcgi-starter в том, что можно указать уникальный PHPRC (каталог с php.ini) для каждого сайта. Например, скопируем системный php.ini в каталог сайта www.example2.com и назначим права:

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

Затем отредактируйте startup-скрипт для php-fcgi этого сайта:

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

И укажите в нём каталог с php.ini:

#!/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:

/etc/init.d/apache2 restart

Создайте файл info.php для второго сайта:

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

Со следующим содержимым:

Откройте http://www.example2.com/info.php и убедитесь, что в строке Loaded Configuration File указан путь /srv/www/web2/php.ini.

phpinfo() — Loaded Configuration File показывает /srv/www/web2/php.ini

3 Изменение отдельных настроек PHP

Если не нужно целиком подменять php.ini, можно добавить опции через ключ -d при запуске php-cgi в том же php-fcgi-starter. Пример: отключим 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:

/etc/init.d/apache2 restart

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

phpinfo() показывает magic_quotes_gpc: Off

4 Проверка и валидация

Что проверить после изменений:

  • В строке Server API должно быть CGI/FastCGI.
  • В строке Loaded Configuration File — путь, который вы ожидали (/srv/www/web2/php.ini или системный php.ini).
  • Изменённые директивы (-d) отображаются в соответствующих строках phpinfo().
  • Логи Apache и системные логи не содержат критических ошибок при старте.

5 Чек-лист администратора

  • Создан файл info.php в корне сайта и доступен по HTTP.
  • Поменян или указан PHPRC в php-fcgi-starter и экспортирован.
  • Параметры PHP_FCGI_CHILDREN и PHP_FCGI_MAX_REQUESTS настроены по потребностям.
  • Перезапущен Apache и проверен phpinfo().
  • Права владельца и группы на php.ini корректны.

6 Типичные ошибки и способы устранения

  • Проблема: phpinfo не доступен или пустая страница.
    • Проверьте логи Apache (/var/log/apache2/error.log), проверьте, исполняется ли php-cgi (ps aux | grep php-cgi).
  • Проблема: Loaded Configuration File указывает на другой php.ini.
    • Убедитесь, что в php-fcgi-starter переменная PHPRC указывает на каталог (с завершающим слэшем) и экспортируется.
  • Проблема: права на /srv/www/web2/php.ini не позволяют читать файл.
    • Выполните chown и chmod соответствующие для пользователя процесса.
  • SELinux/AppArmor: может блокировать доступ к файлам в нестандартных каталогах.
    • Проверьте системные сообщения безопасности и настроите контексты/профили.

7 Мини-методология: быстрый порядок действий

  1. Копирование/создание php.ini в каталоге сайта (если нужен отдельный файл).
  2. Настройка /srv/www/php-fcgi-scripts//php-fcgi-starter: PHPRC и опции -d.
  3. Установка прав на файл php.ini и скрипт.
  4. Перезапуск Apache.
  5. Проверка через info.php и журналы.

8 Быстрая справка: ключевые переменные

  • PHP_FCGI_CHILDREN — количество дочерних процессов php-cgi (в примере 8).
  • PHP_FCGI_MAX_REQUESTS — максимальное число запросов на процесс до перезапуска (в примере 5000).
  • PHPRC — путь к каталогу, где находится php.ini для запускаемого php-cgi.

9 Playbook: откат и инцидентная инструкция

Шаги при проблемах после изменения:

  1. Верните оригинальный php-fcgi-starter или PHPRC на системный каталог /etc/php5/fastcgi/.
  2. Перезапустите Apache и проверьте, восстановился ли сайт.
  3. Если проблема связана с правами, временно выставьте права чтения для всех и протестируйте.
  4. Проанализируйте логи, исправьте причину и постепенно возвращайте строгие права.

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

  • phpinfo() показывает CGI/FastCGI в Server API.
  • Loaded Configuration File указывает на ожидаемый php.ini.
  • Изменённые директивы отображаются корректно.
  • Нет ошибок в логах при старте Apache.

11 Когда этот подход не подходит

  • Если требуется единый php.ini для всего хостинга — проще не создавать per-site PHPRC.
  • Если используете встроенные PHP-FPM пула (php-fpm) с управлением через systemd, лучше настроить отдельные пулы, а не php-cgi обёртки.

12 Диаграмма выбора (Mermaid)

flowchart TD
  A[Нужна ли отдельная конфигурация PHP?] -->|Да| B[Использовать PHPRC в php-fcgi-starter]
  A -->|Нет| C[Оставить системный php.ini]
  B --> D{Требуется ли изменение одной директивы?}
  D -->|Да| E[Добавить -d option к php-cgi]
  D -->|Нет| F[Скопировать php.ini в каталог сайта и указать PHPRC]

13 Ссылки

Итог: использование per-site php-fcgi-starter с PHPRC и/или опциями -d даёт гибкость управления настройками PHP на уровне отдельных сайтов. Всегда проверяйте результат через phpinfo() и логи, а также учитывайте безопасность и права доступа.

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