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

Настройка и тестирование PHP через FastCGI для отдельных сайтов

• 3 min read • DevOps • Обновлено 21 Nov 2025
PHP через FastCGI: отдельный php.ini на сайт
PHP через FastCGI: отдельный php.ini на сайт

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

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

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

Вставьте в файл следующий код:

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

Скриншот вывода phpinfo с указанием Server API CGI/FastCGI

Важно: если вы видите пустую страницу или скачивание файла — скорее всего Apache не перепустил запрос к php-cgi. Проверьте права и владельца wrapper-скрипта и логи Apache.

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

Поскольку каждый сайт запускается своим wrapper-скриптом php-fcgi-starter, вы можете указать индивидуальный php.ini. Пример: скопируем системный php.ini для сайта www.example2.com и дадим файл в его директории:

cp /etc/php.ini /var/www/web2/
chown web2:web2 /var/www/web2/php.ini

(Теперь можно редактировать /var/www/web2/php.ini по потребностям сайта.)

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

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

Вставьте или отредактируйте строку PHPRC, чтобы она указывала на директорию с php.ini:

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

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

/etc/init.d/httpd reload

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

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

Откройте http://www.example2.com/info.php и найдите строку Configuration File (php.ini) Path — она должна указывать на /var/www/web2/php.ini.

Скриншот вывода phpinfo с путём к php.ini в директории сайта

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

Вместо передачи целого php.ini можно изменить отдельные параметры, добавив switch -d при запуске php-cgi в wrapper-скрипте.

Например, чтобы выключить magic_quotes_gpc для сайта web2, отредактируйте скрипт так:

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

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

/etc/init.d/httpd reload

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

Скриншот вывода phpinfo с параметром magic_quotes_gpc: Off

Практические советы и контроль качества

Быстрая проверка

  • Убедитесь, что wrapper-скрипт исполняем и принадлежит нужному пользователю.
  • Проверьте логи Apache (/var/log/httpd/error_log) на ошибки при запуске php-cgi.
  • Используйте phpinfo() только временно и удаляйте файл после теста.

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

  • info.php открывается без скачивания и показывает CGI/FastCGI в Server API.
  • Configuration File Path (php.ini) указывает на ожидаемую директорию сайта при использовании PHPRC.
  • Изменённые параметры через -d отражаются в phpinfo().

Роль-based чеклист

  • Администратор: проверить права, владельца, SELinux-контекст, перезагрузить Apache.
  • Девопс/инженер: подтвердить переменные окружения в wrapper-скрипте и значения CHILDREN/REQUESTS.
  • Разработчик: запустить phpinfo() и проверить конфигурацию расширений и настроек INI.

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

  • Если вы используете системный php-fpm с пулами (pools), лучше задать настройки через конфигурацию пулов, а не через wrapper-скрипты.
  • В окружениях с контейнерами (Docker, Kubernetes) управление php.ini делается на уровне образа или ConfigMap.
  • Если сайт использует модуль mod_php (mpm_prefork), этот способ не применим — модуль использует глобальный php.ini.

Модель принятия решений (эвристика)

  • Нужна изоляция конфигурации сайта? — Используйте PHPRC или отдельный php.ini в директории сайта.
  • Нужна динамическая смена параметров без создания отдельного php.ini? — Применяйте -d в exec.
  • Требуется масштабируемость и централизованное управление? — Рассмотрите php-fpm с пулом и конфигурацией на уровне развертывания.

Безопасность и осторожность

  • Не давайте файлу phpinfo() публичный доступ в продакшене: он раскрывает пути и версии.
  • Ограничьте права на /var/www/webX/php.ini и на скрипты php-fcgi-starter.
  • Если включён SELinux, настройте правильные контексты для директорий и файлов.

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

  • PHPRC — переменная окружения, указывающая директорию для загрузки php.ini.
  • php-cgi — CGI-исполняемый файл PHP для запуска через FastCGI.
  • php-fcgi-starter — wrapper-скрипт, который задаёт окружение и вызывает php-cgi.

7 Ссылки

Резюме: тестируйте через phpinfo(), используйте PHPRC для отдельных php.ini и -d для одиночных изменений. Убедитесь в правильных правах и проверяйте логи для отладки.

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