Ubuntu 16.04 中的 PHP7。一个 FPM 池尝试 chroot 另一个 FPM 池

Ubuntu 16.04 中的 PHP7。一个 FPM 池尝试 chroot 另一个 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 [email protected]

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。

我该如何修复它?

答案1

问题出在 opcache 上。我使用 chroot,因此 opcache 看不到不同站点的两个脚本之间的差异。当我禁用 opcache 时,池开始正常工作。

答案2

这是一个PHP 中的已知错误,不幸的是,这个问题已经存在好几年了,却一直没有得到解决。

但是,有一个解决方法:设置

opcache.revalidate_freq=0

php.ini或其中包含的文件)可以解决这个问题,但性能会略有下降,但比关闭 opcache 的下降要小得多。

相关内容