是否可以使用不同的池选项设置 PHP-FPM(启用 xdebug / 禁用 xdebug)

是否可以使用不同的池选项设置 PHP-FPM(启用 xdebug / 禁用 xdebug)

我有一个 LEMP 环境,需要将所有开发子域与暂存区分开(使用 xdebug 进行开发,不使用 xdebug 进行暂存)。

  • dev.projectX.mydomain.tld
  • staging.projectX.mydomain.tld

因此我设置了两个池 php-dev 和 php-stage,但似乎我只能在 php.ini 中启用扩展!?

这是我的pool.conf(dev)

[php-dev]
listen = 127.0.0.1:9101
listen = /var/run/php-fpm/a1-php-dev.socket
listen.backlog = -1
listen.allowed_clients = 127.0.0.1

user = nginx
group = nginx

request_slowlog_timeout = 3s
slowlog = /var/log/php-fpm/slowlog-php-dev.log

pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 500
pm.status_path = /status

request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes

env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_admin_value[zend_extension]         = "/usr/lib64/php/modules/xdebug.so"
php_admin_value[xdebug.default_enable]      = 0
php_admin_value[xdebug.remote_enable]       = 0
php_admin_value[xdebug.remote_autostart]        = 0
php_admin_value[xdebug.remote_host]         = localhost 
php_admin_value[xdebug.profiler_enable_trigger]     = 0
php_admin_value[xdebug.remote_port]         = 9001
php_admin_value[xdebug.collect_params]      = 2
php_admin_value[xdebug.collect_vars]        = 1
php_admin_value[xdebug.trace_format]        = 2

不幸的是,xdebug 不会被加载。

是否有其他选项可以仅在 dev.* 域上加载 xdebug?

答案1

不幸的是,您无法为每个 FPM 池加载不同的模块或模块版本。到目前为止,我在类似情况下创建了多个完全独立的 PHP-FPM 实例。

答案2

是的,但额外的池也需要在单独的服务下运行。该服务可以使用相同的二进制文件,但需要自己的配置文件和(一些)目录。如何实现这一点取决于您的系统及其服务管理器。我使用了这个答案作为基础,因为我有 systemd。

答案3

最简单的是在 /etc/init/php-xdebug 中创建服务

start on runlevel [2345]
stop on runlevel [016]

# you can uncomment this with recent upstart
# reload signal USR2

pre-start script
mkdir -p /run/php
chmod 0755 /run/php
chown www-data:www-data /run/php
end script

respawn
exec /usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-xdebug.conf

答案4

XDebug 与 PHP-FPM 结合使用有一个缺陷 - 选项 xdebug.mode 只能在 php.ini 中设置。但是,如果您有一个生产站点和一个暂存站点使用相同的 php.ini,并且您希望在暂存站点启用 xdebug,但在生产站点禁用 xdebug(因为性能问题),那么您就会遇到问题。您可以通过创建另一个 php-fpm 服务来解决这个问题(https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files) 并在单元配置中设置 php.ini 文件,该文件将是启用 xdebug 的新 ini 文件。然后,您只需确保您的调试请求指向这个新的 php-fpm(您可以通过设置 fpm 池的监听主机和端口来实现)。

希望我为其他在 xdebug、php-fpm 和 php.ini 方面遇到困难的人留下一些线索……

相关内容