어떤 이유로 PHPStorm은 원격 호스트에서 웹 서버에 액세스할 때 디버그 연결을 수신하지 못합니다. PHPStorm은 전혀 듣지 않는 것처럼 동작합니다. 동일한 호스트에서 웹 서버에 액세스하면 디버그 연결이 허용되고 예상되는 동작인 첫 번째 줄에서 중단됩니다.
내 현재 설정:
호스트 머신: Windows 10 PRO, Chrome 브라우저, 방화벽 비활성화(테스트용)
게스트 머신: 호스트 시스템의 Hyper-v VM에 설치된 Ubuntu 18.04
게스트 머신 내부에는 다음 컨테이너를 실행하는 Docker가 설치되어 있습니다.
- PHP-FPM 7.2.16
- 아파치-httpd 2.4
PHP-FPM은 XDEBUG 9009 동안 포트 9000을 사용하도록 구성됩니다.
PHP 구성:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9009
아파치 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
디버거를 사용하면 REQUESTER의 IP로 디버그 연결을 보냅니다. 이 경우 GUEST가 아닌 HOST였습니다.