是否可以转发 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.1
和connect_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 连接?的主要内容,如果未能解决你的问题,请参考以下文章