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