phpstorm — Использование Xdebug, когда приложение php находится за Varnish.

Я пытаюсь настроить удаленную отладку 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

2

Решение

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;
}
3

Другие решения

Как обычно задавая вопрос выставил ответ …

Кажется, что из коробки 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.

2

По вопросам рекламы [email protected]