Ответ
Настройка сервера для PHP-приложений — многоуровневый процесс, от глобальных параметров до настроек конкретного приложения. Вот как я это делаю:
1. Уровень операционной системы и PHP-FPM.
- Настройка пулов PHP-FPM (
www.conf) для управления процессами, памятью и доступами под разные приложения или среды (dev/prod).; /etc/php/8.1/fpm/pool.d/www.conf pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 php_admin_value[memory_limit] = 256M
2. Уровень веб-сервера (Nginx/Apache).
- Конфигурация виртуальных хостов, маршрутизация запросов к PHP-FPM через
fastcgi_pass. - Настройка кэширования (headers), gzip, обработки статических файлов, ограничений (
client_max_body_size).
3. Уровень PHP runtime (php.ini).
- Установка глобальных лимитов (
max_execution_time,memory_limit). - Включение/выключение модулей (
opcache,xdebug). - Настройка путей (
include_path) и параметров безопасности (disable_functions,allow_url_fopen).
4. Уровень приложения (.user.ini или ini_set()).
- Локальные переопределения для конкретного проекта, которые можно хранить в репозитории.
; .user.ini в корне проекта upload_max_filesize = 10M post_max_size = 12M display_errors = Off
5. Уровень среды выполнения (Docker/контейнеризация).
- Создание Docker-образов с предустановленными и настроенными расширениями (pdo, redis, gd).
- Использование переменных окружения для динамической конфигурации в разных средах (dev, staging, prod).
Ключевой принцип: Чем выше уровень (OS), тем больше влияние на безопасность и производительность. Настройки уровня приложения — самые гибкие, но их переопределение на более высоких уровнях часто необходимо для production-сред.