php-fpm:禁用特定池的 php 扩展

php-fpm : disabling a php extension for a specific pool

我已经配置了一个新的 FPM 池(pool.d 中的配置文件 www.conf),现在假设我想禁用 mysql 对该特定池的支持?或者也许有一种方法 not 可以为该池加载该扩展?

我使用的是 debian 9,文件结构如下所示:

/etc/php/7.0/fpm$ tree
.
├── conf.d
│   ├── 10-mysqlnd.ini -> /etc/php/7.0/mods-available/mysqlnd.ini
│   ├── 10-opcache.ini -> /etc/php/7.0/mods-available/opcache.ini
│   ├── 10-pdo.ini -> /etc/php/7.0/mods-available/pdo.ini
│   ├── 20-calendar.ini -> /etc/php/7.0/mods-available/calendar.ini
│   ├── 20-ctype.ini -> /etc/php/7.0/mods-available/ctype.ini.ini
(...)
├── php-fpm.conf
├── php.ini
└── pool.d
    ├── forgewww.conf
    └── www.conf

extension=thing.so 可在文件 conf.d/<extension>.ini 中找到。问题是所有这些扩展一旦配置似乎对所有池都是通用的...

我还尝试使用 phpdismod 全局禁用 mysql 扩展,然后在 www.conf 中添加一行:

php_admin_value[extension] = mysqli.so

这似乎不起作用(上面没有为该池启用 mysqli)

您不能加载不同的扩展 per-pool,扩展在 .ini 文件中定义,由主进程加载。 php-fpm master 进程分叉到 children,这意味着它们共享 master 进程加载的内容。您不能让 child 在分叉后加载一组不同的扩展,或卸载它们。开发一个解决方案可能是可能的,但实际上没有必要看到您可以通过不同的方法解决您的问题。

为了实现您的目标,只需在不同的端口/unix 套接字上设置完全不同的 php-fpm 进程并加载您需要的扩展,设置池即可。它实际上比听起来要少得多,它可能不会超过几分钟。