nginx передает запрос в неправильный пул php-fpm - PullRequest
0 голосов
/ 04 октября 2018

Есть машина с 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;

1 Ответ

0 голосов
/ 19 ноября 2018

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

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

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

opcache.validate_root=1

opcache.validate_root boolean

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

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

РЕДАКТИРОВАТЬ: Поиск правильных слов (validate_root) Я нашел гораздо больше об этой ошибке:

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

...