nginx php-fpm xdebug netbeans может запустить только один сеанс отладки


В прошлом я использовал apache + mod_php+xdebug+netbeans для разработки моего веб-сайта (сервер - это моя локальная машина, работающая под управлением Debian Squeeze), с удовольствием-xdebug работал так, как ожидалось, сеансы отладки можно было запускать и останавливать в любое время, когда мне это нужно. Но, когда я перешел на nginx+php_fpm+xdebug+netbeans, у меня возникли некоторые проблемы с отладкой.

  1. моя отладочная сессия может быть очень длинной (намного больше 30 секунд) и кажется, что nginx не мог ждать так долго, он показывает "504 Gateway timeout error". Я перепробовал множество рекомендаций для решения этой проблемы, но безуспешно. Хотя, это не очень важно для меня, потому что сама отладочная сессия продолжает работать,и это просто немного неудобно.
  2. мой сеанс отладки может быть запущен только один раз, поэтому, если я остановлю его и попытаюсь запустить отладку снова, netbeans не сможет принять соединение от xdebug (он пишет "ожидание соединения xdebug", и это навсегда). После перезапуск netbeans сеанс отладки может быть запущен снова в обычном режиме.
  3. в некоторых случаях, которые я не мог понять, отладка "включается для всех PHP-скриптов" и предотвращает запуск любых других скриптов. Например, я начинаю сеанс отладки на моем веб-сайте http://mysite.локальный / индекс.php и работа с ним. Через некоторое время я заметил, что мой админ (размещен в интранете.местные/проблемы.php) не запускается, браузер пытается загрузить страницу в течение некоторого времени, и чем показывает "Ошибка таймаута шлюза 504". Если я увижу такое поведение, я могу просто остановить сеанс отладки xdebug в netbeans, и все другие сценарии начнут работать нормально.

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

Моя система и приложения: Debian squeeze:2.6.32-5-686 Nginx: 1.4.1 (из репозитория dotdeb) php5-fpm: 5.3.26-1~d (из репозитория dotdeb) php5-xdebug: 5.3.26-1~d (из репозитория dotdeb) netbeans: 7.3

Мой конфиг:

  1. базовая конфигурация nginx: https://gist.github.com/MihanEntalpo/6229801
  2. конфигурационный файл сайта nginx: https://gist.github.com/MihanEntalpo/6229781
  3. файл fastcgi_params: https://gist.github.com/MihanEntalpo/d93fd4105573e1eda56f
  4. файл конфигурации пула php-fpm: https://gist.github.com/MihanEntalpo/6229820
  5. php-fpm xdebug config file: https://gist.github.com/MihanEntalpo/6229836
  6. netbeans: options, то же самое было и с сервером apache:
    • разрыв на первой строке = выкл
    • оценка во всплывающем окне = ON
    • Show requesting URL's = ON
    • порт = 9000

Запись в файле журнала ошибок nginx, когда он не может дождаться отладки скрипта или другого скрипта, заблокирован проблемой №3, упомянутой ранее:

2013/08/14 14:40:16 [ошибка] 4822#0: * 111 upstream timed out (110: тайм-аут соединения) при чтении заголовка ответа из upstream, клиент: 192.168.100.1, сервер: интрасеть.местные, запрос: "получить /проблемы.php?имя пользователя=root&дБ=девел&таблица=пользователя HTTP/1.1", вверх по течению: "в FastCGI://127.0.0.1:9999", ведущий: "интранет.local", реферер: "https://intranet.местные/проблемы.php?username=root&db=devel "

Логи Php-fpm не содержат сообщение об ошибке...

Я не люблю никого беспокоить своими проблемами, и всегда пытаюсь решить их сам. Но в данном случае, я сражаюсь с этими в течение нескольких месяцев без удачи... Если кто-то столкнулся с этой проблемой или имеет рабочий конфиг для использования с nginx + php-fpm+xdebug+netbeans-пожалуйста, помогите мне:)
3 7

3 ответа:

Спасибо всем, кто пытался думать в направлении моей проблемы. Я ее успешно решил.

  1. Первая проблема (с ошибкой 504) может быть решена с помощью опции nginx fastcgi_read_timeout, например, это может быть fastcgi_read_timeout 600; для tell nginx, что он должен ждать 600 секунд. Его следует поместить в конфигурационный файл хоста или в файл /etc/nginx/fastcgi_params (в Debian)
  2. вторая проблема была вызвана опцией в моем xdebug.conf: xdebug.remote_autostart=1;, это должно быть xdebug.remote_autostart=0;. А я нет поймите реальное значение этого параметра, но он делает следующее: любой php-скрипт автоматически пытается подключиться к отладчику (netbeans в моем случае). Так, в некоторых случаях netbeans теряет соединение, и когда я нажимаю "начать отладку", он не знает, что новое соединение должно быть открыто, и ждет клиента xdebug вечно. Теперь, с помощью упомянутой опции, я могу начать и остановить отладку в любое время, когда мне это нужно.
  3. Третья проблема имела тот же источник, что и вторая. Все остальные скрипты, работающие на моем сервере пытались подключиться к netbeans, но с потерянным соединением это было бессмысленно.
В любом случае, я надеюсь, что это поможет кому-то, кто хочет решить подобные проблемы. StackOverflow помог мне, заставив меня определенно описать мою проблему, и в этом процессе я получил новые идеи о том, что нужно попробовать.

При обновлении fastcgi_read_timeout вы можете увеличить лимит времени для всех сайтов на сервере (vagrant homestead VM в моем случае) вы можете сделать следующее, Как только вы SSH'D в вашей виртуальной машине:

sudo pico /etc/nginx/nginx.conf

И добавить

fastcgi_read_timeout 300;

В раздел http.

Для всех, у кого была одна и та же проблема, когда принятый ответ не работал, в моем случае это было недавно установленное приложение, которое блокировало xdebug.

Моя компания имеет удаленный доступ для установки программного обеспечения безопасности на моем ноутбуке, поэтому они установили ESET Endpoint Security.app и ESET Remote Administrator Agent.app, которые, по-видимому, также фильтруют локальные соединения. Прошло два дня, прежде чем я, наконец, заметил, что есть демон ESET, работающий и блокирующий соединения на 127.0.0.1:9000.

Решение состояло в том, чтобы перейти к мусору оба приложения, так как у меня нет необходимых прав администратора, чтобы отключить фильтрацию в настройках приложения.