2017-01-01 2 views
9

У меня есть PHP-сервер, работающий через PHP-FPM, который обслуживается с fastcgi через nginx на порту 7000. Это приложение было задокументировано и работает как работающий контейнер, например. my_api.Как я могу использовать XDebug с PHP вверх позади обратного прокси-сервера nginx?

Контейнер my_api докера может быть подключен напрямую через порт 7000 (для здравого смысла проверки), а также через другой контейнер, который действует как Nginx обратного прокси-сервер, который использует выше по потоку, чтобы выставить my_api приложение (и другие) на порты 80 и 443 (порт 80 перенаправляет на SSL) через proxy_pass директивы в соответствующих местах.

Если я запустить XDebug сессии, используя DBGp порта 9000 непосредственно на файл подается с http://localhost:7000 я могу видеть сеанс отладки установлен правильно, и я могу отладить.

Однако, если я попытаюсь запустить сеанс XDebug против URL-адреса, обслуживаемого обратным прокси-сервером nginx, например. https://localhost/my-api, сеанс отладки не запускается или, по крайней мере, он не создает соединение должным образом (в моей среде IDE отсутствуют точки останова).

Как установить сеанс XDebug для запросов, сделанных через обратный прокси nginx?

Для целей данного вопроса, ниже (значение) образец моей docker-compose.yml конфигурации и xdebug.ini:

докер-compose.yml:

version: "2" 

services: 
    api: 
    build: <path_to_dockerfile> 
    ports: 
     - 7000:7000 
     #- 9000:9000 # may be uncommented for direct debugging access 
    nginx_proxy: 
    build: <path_to_dockerfile> 
    links: 
     ... 
     - api:api 
    ports: 
     - 80:80 
     - 443:443 

xdebug.ini

zend_extension=xdebug.so 
xdebug.remote_enable=true 
xdebug.remote_connect_back=1 
xdebug.remote_port=9000 
xdebug.remote_handler=dbgp 
xdebug.remote_autostart=0 

NB: Я попробовал несколько различных конфигураций, чтобы попытаться получить эту работу, в том числе запуск контейнера Docker с использованием dbgpproxy, но ничто не позволяет мне отлаживать запросы, которые проходят через обратный прокси. Это очень возможно, хотя конфигурация, которую я использовал для этих попыток, была просто неправильной.

У меня есть несколько теорий о моих проблемах, среди которых подозрение, что это IP-адрес обратного прокси, который передается XDebug через свойство конфигурации remote_connect_back.

Любая помощь или понимание того, как правильно настроить XDebug для работы с запросами, которые выполняются на сервере через прокси-сервер nginx, будет высоко оценен!

Я могу предоставить более подробную информацию, если было бы полезно!

+1

'xdebug.remote_connect_back = 1' - сделать = '0' и использовать надлежащий хост/IP в 'xdebug.remote_host' – LazyOne

+1

Также - включите протокол xdebug и посмотрите, что он должен будет сказать - он покажет, какой IP: por t он пытается подключиться и (если сеанс отладки принят), что там происходит. – LazyOne

ответ

1

Вот как я получил PHP Шторм для подключения к dockerized приложения PHP-FPM/Nginx:

Инжектируйте удаленный хост IP в контейнер.В вашем хосте установите переменную:

XDEBUG_HOST=$(ipconfig getifaddr en0) 

Я не слишком хорошо знаком с докер-составом. Я использую манифест Kubernetes, но я уверен, что есть способ внедрить переменные среды.

в xdebug.ini:

xdebug.remote_host=${XDEBUG_HOST} 

Теперь вы должны быть в состоянии настроить клиент Xdebug для прослушивания xdebug.remote_port для отладки соединений. Вам также необходимо настроить сервер отладки в PHP Storm или любую используемую вами среду IDE, которая указывает на http://127.0.0.1:8080 (или любой другой порт, на который вы пересылаете порт nginx в порт).

Вот как выглядит моя установка. Я использую PHP Storm, но я уверен, что вы можете адаптировать его к другим клиентам xdebug.

PHP Storm Xdebug server settings

PHP Storm preferences

xdebug.ini:

zend_extension=xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_port=10000 
xdebug.remote_autostart=1 
xdebug.idekey=www-data 
xdebug.remote_host=${XDEBUG_HOST} 

Ссылка: https://shippingdocker.com/xdebug/

 Смежные вопросы

  • Нет связанных вопросов^_^