是否可以转发 Xdebug 连接?

Posted

技术标签:

【中文标题】是否可以转发 Xdebug 连接?【英文标题】:Is it possible to forward Xdebug connections? 【发布时间】:2020-11-20 09:41:07 【问题描述】:

我想设置一种调试隧道。

设置:

    在 Linux VM 上运行的远程 Web 服务器 这台机器上有两个虚拟主机(H1、H2) 两台主机都将 Symfony 4 作为 WebApi 运行 我在 Windows 10 上本地使用 phpStorm 作为 IDE H1 是一个 API H2 也是如此 两者都希望通过 cURL 进行通信

如果我向 H1 或 H2 发出 Postman 请求,Xdebug 效果很好。

现在我想从 H1 向 H2 发送一个 cURL 请求,并想在 PhpStorm 中本地调试 H2 上的请求。

据我了解,Xdebug 将连接回 H1,因为请求来自那里。

我想要的是它在本地连接回我,而不是远程连接到 H1。

我所描述的设置是否可行?:

CLI Command on H1 -> cURL Request to H2 -> Xdebug locally in PhpStorm

两个虚拟主机都使用 php7.2 和相同的 php.ini

提前谢谢大家

【问题讨论】:

“据我了解,xDebug 将连接回 H1,因为请求来自那里。” 为什么?不,您需要将xdebug.remote_host 设为127.0.0.1connect_back 选项禁用(否则remote_host 将被忽略)。只要 Xdebug 会看到您要调试此请求(cookie 或 GET/POST 参数等),它就会尝试调试它/建立调试连接。如果您无法传递参数:将 Xdebug 配置为自动启动或在实际 PHP 代码中使用 xdebug_break(); jetbrains.com/help/phpstorm/… -- 官方如何使用 SSH 隧道进行调试。它清楚地显示并希望解释隧道的工作原理。你们两个站点都在同一个操作系统上。因此,只要您建立了 SSH 隧道(例如本地 9000 --> 远程 9000),然后远程连接到 127.0.0.1:9000 将连接到 SSH 隧道并被转发到隧道的另一端。 derickrethans.nl/debugging-with-xdebug-and-firewalls.html Xdebug 作者的旧原创文章。遗憾的是,我现在找不到另一篇文章,其中的图片可以更好地解释它是如何工作的(我认为视觉上更容易理解)。 感谢您的回答。我想我没有正确解释它。同一台远程机器上的两个虚拟主机相互通信(假设在 ip 1.2.3.4)但我想在 phpstorm 中本地调试此通信,地址为 127.0.0.1。初始请求不是从本地发送的,而是从远程发送到远程的。 Vhost1 向 vhost2 发送请求,我想在本地使用 xDebug 对其进行调试。 所以?问题是什么?连接到 IDE 的是 Xdebug,而不是其他方式。它会在你告诉它的地方连接。请求来自哪里并不重要:来自您的本地 PC(对于主机来说是远程的)或就在远程(对于主机来说是本地的)。 Xdebug/PHP 在服务器上运行;在本地,您只需要一个调试客户端(在您的情况下为 PhpStorm)和源代码。反向 SSH 隧道处理连接(将本地 Xdebug 连接转发到您的 PC)。剩下的就是配置它了。如果您确实已经有 SSH 隧道,那么我在这里看不到问题。 【参考方案1】:

谢谢@lazyone。

对我来说,正确的答案是禁用 connect_back 选项。

这里是配置

[xdebug]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so"
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_host = 192.168.56.1
xdebug.show_local_vars = 1

您的上一条评论帮助我理解了它。

我不知道 xdebug 总是尝试连接到远程 ip,无论请求来自哪里。

在这种情况下,远程意味着:从服务器视图远程,这是我的本地客户端。

现在可以了。非常感谢。

【讨论】:

以上是关于是否可以转发 Xdebug 连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何连接 PhpStorm 和 Xdebug

远程服务器的 Xdebug 未连接

检查 xdebug 是不是正常工作

phpstorm断点调试,xdebug3,win10

如何将PhpStorm与Xdebug连接

使用 VirtualBox 进行远程 Xdebug