Настройка 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.

Важно: если вы не видите 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.

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.

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 Мини-методология: быстрый порядок действий
- Копирование/создание php.ini в каталоге сайта (если нужен отдельный файл).
- Настройка /srv/www/php-fcgi-scripts/
/php-fcgi-starter: PHPRC и опции -d. - Установка прав на файл php.ini и скрипт.
- Перезапуск Apache.
- Проверка через info.php и журналы.
8 Быстрая справка: ключевые переменные
- PHP_FCGI_CHILDREN — количество дочерних процессов php-cgi (в примере 8).
- PHP_FCGI_MAX_REQUESTS — максимальное число запросов на процесс до перезапуска (в примере 5000).
- PHPRC — путь к каталогу, где находится php.ini для запускаемого php-cgi.
9 Playbook: откат и инцидентная инструкция
Шаги при проблемах после изменения:
- Верните оригинальный php-fcgi-starter или PHPRC на системный каталог /etc/php5/fastcgi/.
- Перезапустите Apache и проверьте, восстановился ли сайт.
- Если проблема связана с правами, временно выставьте права чтения для всех и протестируйте.
- Проанализируйте логи, исправьте причину и постепенно возвращайте строгие права.
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 Ссылки
- mod_fcgid: http://fastcgi.coremail.cn/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- OpenSUSE: http://www.opensuse.org/
Итог: использование per-site php-fcgi-starter с PHPRC и/или опциями -d даёт гибкость управления настройками PHP на уровне отдельных сайтов. Всегда проверяйте результат через phpinfo() и логи, а также учитывайте безопасность и права доступа.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента