从远程主机访问 Web 服务器时,PHPStorm 未收到调试连接

从远程主机访问 Web 服务器时,PHPStorm 未收到调试连接

由于某种原因,当从远程主机访问 Web 服务器时,PHPStorm 不会收到调试连接。PHPStorm 的行为就像它根本没有在监听一样。如果我从同一主机访问 Web 服务器,则调试连接会被接受,并且它会在第一行中断,这是预期的行为。


我当前的设置:

主机:Windows 10 PRO,Chrome 浏览器,防火墙已禁用(为了测试)

客机:Ubuntu 18.04 安装在主机上的 Hyper-v VM 上

我在客户机中安装了 Docker,它正在运行以下容器:

  • php-fpm 7.2.16
  • apache-httpd 2.4

PHP-FPM 配置为使用端口 9000,而 XDEBUG 配置为使用端口 9009。

PHP配置:

xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9009

Apache fcgi 配置:

<IfModule proxy_fcgi_module>

<Proxy "fcgi://${PHP_SERVER_NAME}:${PHP_SERVER_FCGI_PORT}" enablereuse=on max=10>
</Proxy>

<FilesMatch "\.php$">
    SetHandler "proxy:fcgi://${PHP_SERVER_NAME}:${PHP_SERVER_FCGI_PORT}"
</FilesMatch>

PHPStorm 安装在 Ubuntu 客户机上。


总结一下:

当在客户机上从 Chrome/Firefox 访问网站时,PHPStorm 接收连接并按预期中断。

当从主机执行完全相同的操作时,网站无需 PHPStorm 接受连接即可呈现。

所以我的问题是,什么原因导致从主机访问时无法创建调试连接?

答案1

替换xdebug.remote_connect_back似乎xdebug.remote_host可以解决问题。

xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = IP_OF_HOST_RUNNING_PHPSTORM
xdebug.remote_port = 9009

据我了解,remote_connect_back 不起作用的原因如下:

如果启用,则 xdebug.remote_host 设置将被忽略,Xdebug 将尝试连接到发出 HTTP 请求的客户端。它会检查 $_SERVER['HTTP_X_FORWARDED_FOR'] 和 $_SERVER['REMOTE_ADDR'] 变量以找出要使用的 IP 地址。

如果配置了 xdebug.remote_addr_header,那么将在 $_SERVER['HTTP_X_FORWARDED_FOR'] 和 $_SERVER['REMOTE_ADDR'] 变量之前检查具有配置名称的 $SERVER 变量。

来源https://xdebug.org/docs/all_settings

因此,xdebug.remote_connect_back调试器会将调试连接发送到请求者的 IP,在本例中是主机 (HOST) 而不是客户机 (GUEST)。

相关内容