PHP7 в Ubuntu 16.04. Один пул FPM пытается синхронизировать другой пул FPM

Я перемещаю свои сайты со старых PHP (php 5.4) и ОС (Ubuntu 12.04) на новый сервер с PHP 7 и Ubuntu 16.04. Я обнаружил ошибку при создании пулов FPM. Вот мой общий пул конфигурации:

[zabbix.example.com]
include = /etc/php/7.0/fpm/default-config.conf

user = www-data
group = www-data
listen = /data/www/zabbix/tmp/php-fpm.sock

request_terminate_timeout = 60s ; 30 sec for work
request_slowlog_timeout = 5s ; add to slowlog after 5 sec

slowlog = /data/www/zabbix/logs/slow.log
chroot =  /data/www/zabbix
chdir =   /public_html

php_admin_flag[display_errors] = off
php_admin_flag[display_startup_errors] = off

php_admin_value[memory_limit] = 256M
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -fno_reply@example.com

php_admin_value[post_max_size] = 16M
php_admin_value[max_execution_time] = 300
php_admin_value[max_input_time] = 300

Вот файл default-config.conf:

pm = dynamic
pm.max_children = 100
pm.start_servers = 12
pm.min_spare_servers = 5
pm.max_spare_servers = 50
pm.max_requests = 1000
pm.status_path = /status

listen.backlog = -1
listen.owner = www-data
listen.group = www-data
listen.mode = 0666

ping.path = /ping
ping.response = pong

request_terminate_timeout = 90
request_slowlog_timeout = 20
catch_workers_output = yes
php_flag[display_errors] = off
php_flag[display_startup_errors] = off
php_value[disable_functions] = show_source,system,shell_exec,passthru,exec,popen,proc_open

php_admin_value[upload_tmp_dir] = /tmp

security.limit_extensions = .php .php3 .php4 .php5 .htm

Этот конфиг работает на старом сервере. Но на новом сервере у меня проблема с chrooting. Некоторые сайты используют другие каталоги chroot сайта. Например, у меня есть эти пулы: site1.example.com, site2.example.com, site3.example.com, zabbix.example.com. Поэтому site1.example.com пытается найти каталог site2.example.com. Если я загружаю site3.example.com, он показывает мне zabbix.example.com.

Как я могу это исправить?

2 ответа

Решение

Проблема была с opcache. Я использую chroot, поэтому opcache не видит различий между двумя скриптами разных сайтов. Когда я отключил opcache, пул начал работать правильно.

Это известная ошибка в PHP, которая, к сожалению, исправлялась годами.

Тем не менее, есть обходной путь: настройка

opcache.revalidate_freq=0

в php.ini (или включенный в него файл) решает проблему с небольшим снижением производительности, хотя и гораздо меньшим, чем отключение opcache.

Другие вопросы по тегам