由於某種原因,從遠端主機存取 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_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 變數。
因此,xdebug.remote_connect_back
偵錯器將偵錯連線傳送到請求者的 IP,在本例中是主機而不是訪客。