從遠端主機存取 Web 伺服器時 PHPStorm 未收到偵錯連接

從遠端主機存取 Web 伺服器時 PHPStorm 未收到偵錯連接

由於某種原因,從遠端主機存取 Web 伺服器時 PHPStorm 未收到偵錯連線。 PHPStorm 的行為就像根本沒有在監聽。如果我從同一台主機存取 Web 伺服器,則偵錯連線會被接受,並且會在第一行中斷,這是預期的行為。


我目前的設定:

主機:Windows 10 PRO、Chrome 瀏覽器、停用防火牆(為了測試)

客機:Ubuntu 18.04 安裝在主機上的 Hyper-v VM 上

在來賓機器中,我安裝了 Docker,它運行以下容器:

  • PHP-FPM 7.2.16
  • 阿帕奇-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_backxdebug.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,在本例中是主機而不是訪客。

相關內容