Por algum motivo, o PHPStorm não recebe a conexão de depuração ao acessar o servidor web de um host remoto. PHPStorm se comporta como se não estivesse ouvindo nada. Se eu acessar o servidor web do mesmo host, a conexão de depuração será aceita e será interrompida na primeira linha, o que é um comportamento esperado.
Minha configuração atual:
Máquina hospedeira: Windows 10 PRO, navegador Chrome, Firewall desativado (para fins de teste)
Máquina convidada: Ubuntu 18.04 instalado em uma VM Hyper-v na máquina host
Dentro da máquina convidada, tenho o Docker instalado, que executa os seguintes contêineres:
- php-fpm 7.2.16
- apache-httpd 2.4
PHP-FPM está configurado para usar a porta 9000 enquanto o XDEBUG 9009.
Configuração PHP:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9009
Configuração do 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 está instalado na máquina convidada Ubuntu.
Então, para resumir:
Ao acessar o site do Chrome/Firefox na máquina convidada o PHPStorm recebe a conexão e quebra conforme o esperado.
Ao fazer exatamente a mesma coisa na máquina host, o site é renderizado sem que o PHPStorm aceite a conexão.
Então, minha pergunta é o que poderia causar o problema de não criar a conexão de depuração ao acessar do host?
Responder1
Substituir xdebug.remote_connect_back
por xdebug.remote_host
parece resolver o problema.
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = IP_OF_HOST_RUNNING_PHPSTORM
xdebug.remote_port = 9009
Pelo que entendi, o motivo pelo qual remote_connect_back não funcionou é o seguinte:
Se ativado, a configuração xdebug.remote_host será ignorada e o Xdebug tentará se conectar ao cliente que fez a solicitação HTTP. Ele verifica as variáveis $_SERVER['HTTP_X_FORWARDED_FOR'] e $_SERVER['REMOTE_ADDR'] para descobrir qual endereço IP usar.
Se xdebug.remote_addr_header estiver configurado, então a variável $SERVER com o nome configurado será verificada antes das variáveis $_SERVER['HTTP_X_FORWARDED_FOR'] e $_SERVER['REMOTE_ADDR'].
Assim com xdebug.remote_connect_back
o depurador envia a conexão debug para o IP do REQUESTER que neste caso era o HOST e não o GUEST.