Por alguna razón PHPStorm no recibe la conexión de depuración cuando accede al servidor web desde un host remoto. PHPStorm se comporta como si no estuviera escuchando en absoluto. Si accedo al servidor web desde el mismo host, se acepta la conexión de depuración y se interrumpe en la primera línea, lo cual es el comportamiento esperado.
Mi configuración actual:
Máquina anfitriona: Windows 10 PRO, navegador Chrome, Firewall deshabilitado (para realizar pruebas)
Máquina invitada: Ubuntu 18.04 instalado en una máquina virtual Hyper-v en la máquina host
Dentro de la máquina invitada tengo instalado Docker que ejecuta los siguientes contenedores:
- php-fpm 7.2.16
- Apache-httpd 2.4
PHP-FPM está configurado para usar el puerto 9000 mientras que XDEBUG 9009.
Configuración de PHP:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9009
Configuración de 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 en la máquina invitada de Ubuntu.
Así que para resumir:
Al acceder al sitio web desde Chrome/Firefox en la máquina invitada, PHPStorm recibe la conexión y se interrumpe como se esperaba.
Al hacer exactamente lo mismo desde la máquina host, el sitio web se muestra sin que PHPStorm acepte la conexión.
Entonces, mi pregunta es ¿qué podría causar que el problema no cree la conexión de depuración al acceder desde el host?
Respuesta1
Reemplazar xdebug.remote_connect_back
con xdebug.remote_host
parece resolver el problema.
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = IP_OF_HOST_RUNNING_PHPSTORM
xdebug.remote_port = 9009
Según tengo entendido, la razón por la que remote_connect_back no funcionó es por lo siguiente:
Si está habilitado, la configuración xdebug.remote_host se ignora y Xdebug intentará conectarse al cliente que realizó la solicitud HTTP. Comprueba las variables $_SERVER['HTTP_X_FORWARDED_FOR'] y $_SERVER['REMOTE_ADDR'] para averiguar qué dirección IP usar.
Si xdebug.remote_addr_header está configurado, entonces la variable $SERVER con el nombre configurado se verificará antes de las variables $_SERVER['HTTP_X_FORWARDED_FOR'] y $_SERVER['REMOTE_ADDR'].
Entonces con xdebug.remote_connect_back
el depurador envía la conexión de depuración a la IP del SOLICITANTE que en este caso era el HOST y no el INVITADO.