PHPStorm не получает отладочное соединение при доступе к веб-серверу с удаленного хоста

PHPStorm не получает отладочное соединение при доступе к веб-серверу с удаленного хоста

По какой-то причине PHPStorm не получает отладочное соединение при доступе к веб-серверу с удаленного хоста. PHPStorm ведет себя так, будто он вообще не слушает. Если я обращаюсь к веб-серверу с того же хоста, отладочное соединение принимается и обрывается на первой строке, что является ожидаемым поведением.


Моя текущая настройка:

Хост-машина: Windows 10 PRO, браузер Chrome, брандмауэр отключен (для тестирования)

Гостевой автомат: Ubuntu 18.04, установленная на виртуальной машине Hyper-v на хост-компьютере

Внутри гостевой машины у меня установлен 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 на гостевой машине 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 с настроенным именем будет проверяться перед переменными $_SERVER['HTTP_X_FORWARDED_FOR'] и $_SERVER['REMOTE_ADDR'].

Источникhttps://xdebug.org/docs/all_settings

Таким образом, xdebug.remote_connect_backотладчик отправляет отладочное соединение на IP-адрес ЗАПРОСИТЕЛЯ, который в данном случае был ХОСТОМ, а не ГОСТЕМ.

Связанный контент