我有一个 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 方面遇到困难的人留下一些线索……