nginx php-fpm xdebug netbeans может запустить только один сеанс отладки
в прошлом, я использовал apache + mod_php+xdebug + netbeans для разработки моего сайта (сервер - моя локальная машина, работает Debian Squeeze), с удовольствием-xdebug работал так же, как ожидалось, сеансы отладки можно было запускать и останавливать в любое время, когда мне это нужно. Но, когда я переехал в nginx+php_fpm+xdebug+netbeans у меня возникли некоторые проблемы с отладкой.
- мой сеанс отладки может быть очень долго (гораздо больше, чем 30 секунд) и кажется, что nginx не мог ждать так долго, он показывает "504 ошибка тайм-аута шлюза". Я пробовал много рекомендаций для решения этой проблемы, но не повезло. Хотя для меня это не очень важно, потому что сам сеанс отладки продолжает работать, и это просто немного неудобно.
- мой сеанс отладки может быть запущен только один раз, поэтому, если я остановлю его и попытаюсь снова запустить отладку, netbeans не сможет принять соединение от xdebug (он пишет " ожидание xdebug connection", и это навсегда). После перезапуска netbeans сеанс отладки можно было снова запустить нормально.
- в случаях, когда я не мог понять, отладка "включается для всех PHP-скриптов" и предотвращает запуск любых других скриптов. Например, я запускаю сеанс отладки на моем веб-сайте http://mysite.индекс местное/.в PHP и работать с ним. Через некоторое время, я заметил, что мой adminer (размещен на интранет.local / adminer.php) не запускается, браузер пытается загрузить страницу в течение некоторого времени, а затем показывает "504 Gateway timeout error". Если я увижу такое поведение, я могу просто остановить сеанс отладки 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
мой конфиг:
- базовая конфигурация nginx:https://gist.github.com/MihanEntalpo/6229801
- файл конфигурации веб-сайта nginx: https://gist.github.com/MihanEntalpo/6229781
- файл fastcgi_params:https://gist.github.com/MihanEntalpo/d93fd4105573e1eda56f
- файл конфигурации пула php-fpm:https://gist.github.com/MihanEntalpo/6229820
- php-fpm xdebug конфигурационный файл:https://gist.github.com/MihanEntalpo/6229836
- netbeans: options, это было то же самое с сервером apache:
- перерыв на первой строке = OFF
- Evalution во всплывающем окне = ON
- показать запрос URL-адреса = ON
- порт = 9000
запись в файле журнала ошибок nginx, когда он не может дождаться отладки скрипта или другого скрипта, заблокированного проблемой №3, упомянутой ранее:
2013/08/14 14:40:16 [ошибка] 4822#0: * 111 upstream timed out (110: время ожидания соединения) при чтении заголовка ответа из upstream, клиент: 192.168.100.1, сервер: интрасети.локальный, запрос: "GET / adminer.РНР?username=root & db=devel&table=user HTTP/1.1", вверх по течению: "fastcgi:/ / 127.0.0.1:9999", хост: "интрасеть.местный" реферер: "https://intranet.local / adminer.РНР?имя пользователя=root & db=devel"
журналы php-fpm не содержат сообщений об ошибках...
Я не люблю беспокоить кого-либо своими проблемами, и всегда пытаюсь решить его самостоятельно. Но в данном случае, я борюсь с этим за некоторые Месяцы без везения... Если кто-то столкнулся с этой проблемой или имеет рабочую конфигурацию для использования с nginx + php-fpm+xdebug + netbeans-пожалуйста, помогите мне:)
3 ответов
спасибо всем, кто пытался думать в сторону моей проблемы. Я успешно ее решил.
- первая проблема (с ошибкой 504) может быть решена с помощью опции nginx fastcgi_read_timeout, например, это может быть
fastcgi_read_timeout 600;
для скажите nginx, что он должен ждать 600 секунд. Он должен быть помещен в конфигурационный файл хоста или в /etc/nginx/fastcgi_params (в Debian) - вторая проблема была вызвана опцией в моем xdebug.conf:
xdebug.remote_autostart=1;
, это должно бытьxdebug.remote_autostart=0;
. Я не понимаю реального значения этой опции, но она делает следующее: любой PHP-скрипт автоматически пытается подключиться к отладчику (netbeans в моем случае). Итак, в каком-то случае netbeans теряет соединение, и когда я нажимаю "начать отладку", он не знает, что новое соединение должно быть открыто, и ждет клиента xdebug навсегда. Теперь, с упомянутой опцией, я могу начать и остановить отладку в любое время, когда мне это нужно. - третья проблема имела тот же источник, как второй. Все остальные скрипты, запущенные на моем сервере, пытались подключиться к netbeans, но с потерянным соединением это было бессмысленно.
в любом случае, я надеюсь, это поможет кто-то, кто хочет решить подобные проблемы. StackOverflow помог мне, заставив меня определенно описать мою проблему, и в этом процессе я получил новые идеи о том, что попробовать.
при обновлении fastcgi_read_timeout вы можете увеличить лимит времени для всех сайтов на сервере (vagrant homestead VM в моем случае) вы можете сделать следующее, Как только вы SSH'D в свою VM:
sudo pico /etc/nginx/nginx.conf
и добавить
fastcgi_read_timeout 300;
в разделе http.
для всех, имеющих ту же проблему, где принятый ответ не работал, в моем случае это было недавно установленное приложение, которое блокировало xdebug.
моя компания имеет удаленный доступ для установки программного обеспечения безопасности на моем ноутбуке, чтобы они установили ESET Endpoint Security.app
и ESET Remote Administrator Agent.app
который, по-видимому, также фильтрует соединения localhost. Мне потребовалось два дня, пока я наконец не заметил, что на127.0.0.1:9000
.
В решением было переместить в корзину оба приложения, так как у меня нет необходимых прав администратора для отключения фильтрации в настройках приложения.