【发布时间】: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 隧道,那么我在这里看不到问题。
标签: linux phpstorm xdebug vhosts