PHPStorm não recebe conexão de depuração ao acessar o servidor web de um host remoto

PHPStorm não recebe conexão de depuração ao acessar o servidor web de um host remoto

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_backpor xdebug.remote_hostparece 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'].

Fontehttps://xdebug.org/docs/all_settings

Assim com xdebug.remote_connect_backo depurador envia a conexão debug para o IP do REQUESTER que neste caso era o HOST e não o GUEST.

informação relacionada