Я пытаюсь настроить удаленную отладку Xdebug на сайт, находящийся за Varnish, в качестве слоя кэширования, используя PHPStorm.
Varnish работает как порт на 80-м порту, а Apache говорит с ним как на сервере 8080.
Если я обойду Varnish и поговорю с сайтом через порт 8080, Xdebug и Phpstorm работают должным образом, однако тогда я не проверяю систему должным образом — мне действительно нужно запустить сеанс отладки, даже если запрос проксируется через Лак.
Очевидно, я не ожидаю, что кэшированный контент вызовет сеанс отладки, но не кэшированный контент все равно должен.
Мои настройки Xdebug следующие:
; xdebug
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.scream=0
xdebug.cli_color=1
xdebug.show_local_vars=1
Xdebug поддерживает попытку подключения к IP-адресу, указанному в X_HTTP_FORWARDED_FOR начиная с 2.2.0 (исправлена ошибка в 2.2.2), см. Ошибки # 598 & # 660. В зависимости от вашей версии Varnish вам может понадобиться добавить заголовок или он может быть настроен для вас с помощью лака.
Если вы установите заголовок, ваша оригинальная конфигурация должна работать.
Добавить в vcl_recv
:
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
Как обычно задавая вопрос выставил ответ …
Кажется, что из коробки IP-адрес запроса не отображается через php как $_SERVER[REMOTE_ADDR]
так с remote_connect_back
включенный Xdebug пытается подключиться не к PHPStorm, а к самому Varnish.
Изменение настроек xdebug для явной установки remote_host решило проблему следующим образом:
; xdebug
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.remote_host = 192.168.150.1
xdebug.remote_port = 9000
xdebug.scream=0
xdebug.cli_color=1
xdebug.show_local_vars=1
В этом случае он работает нормально для меня, так как я всегда запрашиваю от 192.168.150.1 (это хост-машина для моих виртуальных машин)
Я думаю, что более общее решение переназначить поле REMOTE_ADDR на исходный IP-адрес, а не на IP-адрес Varnish.