Как передать параметры настройки php при связке apache+php-fpm?

Проблема в следующем работает на Linux Аpache v2.4.37 + PHP v8.2
Настройки делал не я и по умолчанию в виртуальные хосты apache я добавлял параметры для php
например:
php_admin_flag register_globals Off
php_admin_value memory_limit 512M
php_admin_value max_execution_time 300
php_admin_value upload_max_filesize 1024M
php_admin_value post_max_size 1024M

И с этими настройками все отлично работало (и бед не знал)...
Но потом сказали что нужно включить для Apache режим мультипроцессорного....
эта хрень лежит в /etc/httpd/conf.modules.d/00-mpm.conf
была включена строчка
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

и для работы Apache мультипроцессорного нужно включить строчку
LoadModule mpm_worker_module modules/mod_mpm_worker.so
или
LoadModule mpm_event_module modules/mod_mpm_event.so

и естественно перестали работать параметры в виртуальных хостах php_admin_flag......
Вопрос - как можно настроить для каждого VirtualHost отдельные настройки PHP и не править php.ini?

phpinfo - показывает что php работает через FPM/FastCGI
пытался передать параметры PHP через FcgidInitialEnv
например
FcgidInitialEnv PHP_VALUE "memory_limit=512M"

но ничего не получается....
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@grek_cheburek
Программист самоучка
Вот что ответил chat gpt.
Когда Apache работает в режиме mod_php (например, с mpm_prefork), параметры PHP можно настраивать напрямую в конфигурации виртуальных хостов с помощью директив php_admin_flag и php_admin_value. Однако, когда используется php-fpm в связке с многопоточным MPM (например, mpm_worker или mpm_event), PHP запускается как отдельный процесс, и Apache передает запросы через FastCGI. В этом случае директивы Apache, такие как php_admin_flag и php_admin_value, больше не работают.
Чтобы задать отдельные настройки PHP для каждого виртуального хоста при использовании Apache с php-fpm, можно воспользоваться следующими подходами:
1. Использование .user.ini
PHP поддерживает использование файлов .user.ini для переопределения определённых настроек на уровне директории. Вы можете создать файл .user.ini в корневой директории каждого виртуального хоста и добавить в него настройки, которые вы хотите изменить. Например:
/var/www/example.com/.user.ini
ini
Копировать код
memory_limit = 512M
max_execution_time = 300
upload_max_filesize = 1024M
post_max_size = 1024M

Примечание: Убедитесь, что в файле php.ini включена директива user_ini.filename, и она указывает на имя файла .user.ini.
2. Настройка PHP-FPM пула для каждого VirtualHost
Вы можете создать отдельные пулы для каждого виртуального хоста в конфигурации php-fpm. В конфигурации каждого пула можно задать свои параметры PHP.
Создайте новый конфигурационный файл пула, например, /etc/php-fpm.d/example.com.conf:
ini
[example.com]
user = apache
group = apache
listen = /var/run/php-fpm-example.com.sock
listen.owner = apache
listen.group = apache
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

php_admin_value[memory_limit] = 512M
php_admin_value[max_execution_time] = 300
php_admin_value[upload_max_filesize] = 1024M
php_admin_value[post_max_size] = 1024M

После этого в конфигурации виртуального хоста Apache пропишите использование соответствующего пула:
apache
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm-example.com.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

3. Использование SetEnv и .htaccess
Если вы хотите использовать переменные окружения для передачи настроек PHP, можно использовать директиву SetEnv в конфигурации виртуального хоста Apache. Затем в php-fpm можно настроить обработку этих переменных.
Пример для Apache:
apache
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com

    SetEnv PHP_VALUE "memory_limit=512M
    max_execution_time=300
    upload_max_filesize=1024M
    post_max_size=1024M"
</VirtualHost>

Резюме
Наиболее гибкий и мощный способ управления настройками PHP при использовании php-fpm — это создание отдельного пула для каждого виртуального хоста. Этот подход позволяет точно настраивать параметры PHP для каждого сайта или приложения, а также эффективно управлять ресурсами сервера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы