nginx передает запрос в неверный пул php-fpm

Есть машина с nginx и php-fpm. Есть 2 сервера, 2 пула php-fpm (каждый с chroot) и 2 каталога с одинаковой структурой и похожими файлами/php классы.

Один пул прослушивает 127.0.0.1:22333, а другой — 127.0.0.1:22335. Проблема в том, что когда я делаю запрос на второй сервер, он каким-то образом выполняется на первом пуле. Еще более странно, что иногда он берет некоторые классы PHP из одной директории (первого пула), иногда из другой. Определенной закономерности нет, кажется, что это происходит случайно.

Например: журналы Nginx показывают, что запрос поступает на второй сервер, а журналы php-fpm показывают, что он был обработан в первом пуле.

Но наоборот никогда не бывает (запросы к первому серверу всегда выполняются с первым пулом php-fpm)

Пулы настраиваются таким же образом:

same user
same group
pm = dynamic
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 300
chroot = ...
chdir = /

php_flag[display_errors] = on
php_admin_value[error_log] = /logs/error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 64M
catch_workers_output = yes
php_admin_value[upload_tmp_dir] = ...
php_admin_value[curl.cainfo] = ...

Директива серверов Nginx для php выглядит так:

fastcgi_pass 127.0.0.1:2233X;
fastcgi_index  index.php;
include /etc/nginx/fastcgi_params;

fastcgi_param DOCUMENT_ROOT    /;
fastcgi_param SCRIPT_FILENAME  $fastcgi_script_name;
fastcgi_param PATH_INFO        $fastcgi_script_name;
fastcgi_intercept_errors       off;

person whn    schedule 04.10.2018    source источник


Ответы (1)


Была такая же проблема. Лучший ответ на этот вопрос до сих пор был на ServerFault, который предложил opcache.enable=0, что указало мне на довольно интересное поведение PHP.

кеш APC/OPcache совместно используется всеми пулами PHP-FPM

Копаясь дальше в документации opcache, я нашел эту php.ini опцию:

opcache.validate_root=1

opcache.validate_root логическое значение< /а>

Предотвращает конфликты имен в средах с chroot. Это должно быть включено во всех средах с chroot, чтобы предотвратить доступ к файлам за пределами chroot.

Установка для этого параметра значения 1 (по умолчанию 0) и перезапуск php-fpm устранили проблему для меня.

EDIT: Поиск правильных слов (validate_root) Я нашел гораздо больше об этой ошибке:

Следуя примечаниям из обсуждения ошибок, вы также должны рассмотреть возможность установки opcache.validate_permission=1

person Ludwig Behm    schedule 19.11.2018
comment
Спасибо, Людвиг! - person whn; 20.03.2019