何らかの理由で、PHPStorm はリモート ホストから Web サーバーにアクセスするときにデバッグ接続を受信しません。PHPStorm はまったくリッスンしていないかのように動作します。同じホストから Web サーバーにアクセスすると、デバッグ接続が受け入れられ、最初の行で切断されますが、これは予想される動作です。
現在の設定:
ホストマシン: Windows 10 PRO、Chrome ブラウザ、ファイアウォール無効 (テストのため)
ゲストマシン: ホストマシン上の Hyper-v VM にインストールされた Ubuntu 18.04
ゲスト マシン内には 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 から Web サイトにアクセスすると、PHPStorm は接続を受信し、予想どおりに切断されます。
ホスト マシンからまったく同じことを実行すると、PHPStorm が接続を受け入れずに Web サイトがレンダリングされます。
私の質問は、ホストからアクセスするときにデバッグ接続が作成されない問題の原因は何であるかということです。
答え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 変数は、$_SERVER['HTTP_X_FORWARDED_FOR'] および $_SERVER['REMOTE_ADDR'] 変数の前にチェックされます。
したがって、xdebug.remote_connect_back
デバッガーはデバッグ接続を REQUESTER の IP に送信します。この場合、REQUESTER は GUEST ではなく HOST です。