Подтвердить что ты не робот

Как включить xdebug с nginx?

Моя ситуация такова:

У меня есть VM (сервер Ubuntu 13.04) с PHP 5.4.9-4ubuntu2.2, nginx/1.2.6, php5-fpm и Xdebug v2.2.1.

Я разрабатываю приложение, используя PhpStorm 6.0.3 (который я развертываю на виртуальной машине).

Моя проблема в том, что всякий раз, когда я пытаюсь запустить сеанс отладки, среда IDE никогда не получает запрос на соединение с веб-сервера (и, таким образом, сеанс никогда не запускается).

Я просмотрел множество рекомендаций по конфигурации xdebug и не нашел ничего полезного.

То, что я недавно понял, заключается в том, что если я сам установил cookie XDEBUG_SESSION через браузер (спасибо FireCookie), я могу отладить мое приложение... так что я думаю, что есть что-то, что веб-сервер отсылает cookie обратно клиенту.

Дело в том, что я использую одну и ту же конфигурацию IDE в другом проекте, который развертывается в другой виртуальной машине на базе CentOS (с lighttpd), и он отлично работает.

Я попытался развернуть мой текущий проект в такой виртуальной машине (сменив веб-сервер на NginX), и он работал полностью (к сожалению, я потерял эту виртуальную машину и не могу проверить конфигурацию:().

Итак... вот моя конфигурация NginX:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name localhost;

    location / {
        try_files $uri $uri/ /dispatch.php;
    }

    #
    location ~ \.php$ {
        root /var/www/bresson/web;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index  dispatch.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
        include fastcgi_params;
        #fastcgi_pass   127.0.0.1:9009;
    }

}

fpm config (/etc/php5/fpm/pool.d/www.conf):

listen = /var/run/php5-fpm.sock

xdebug.ini:

zend_extension=/usr/lib/php5/20100525/xdebug.so
xdebug.remote_port=9000
xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_log=/var/log/xdebug.log

Любая идея будет высоко оценена. Спасибо!

EDIT:

Еще одна вещь, которую я пробовал, - начать сеанс с php, и я увидел, что cookie сеанса был создан без проблем...

2nd Edit:

Я думаю, что нашел, где проблема: URI.

Я написал еще один script, чтобы попробовать параметры конфигурации и прочее (намного проще), и это сработало!

Итак, в конце концов, я решил, что проблема заключается в том, что параметры запроса (т.е. XDEBUG_SESSION_START=14845) не достигли моего script.

Проблема заключается в моем исходном URI, который имеет форму /images/P/P1/P1010044-242x300.jpg. Через некоторую конфигурацию виртуального хоста я должен был бы перенаправить его на что-то вроде /dispatch.php/images/P/P1/P1010044-242x300.jpg и использовать остальную часть URI в качестве параметров. Итак... Я не нашел решения как такового, но теперь у меня есть жизнеспособное решение (указывая мой начальный URL-адрес на /dispatch.php), который будет делать это некоторое время. Благодаря

4b9b3361

Ответ 1

На всякий случай кто-то читает это... Я понял!

Проблема была в конфигурации nginx. Я только что скопировал шаблон откуда-то, но теперь я прочитал немного больше и узнал, что моя конкретная конфигурация была намного проще:

location / {
        root /var/www/bresson/web/;
        include fastcgi_params;     
        fastcgi_param SCRIPT_FILENAME $document_root/dispatch.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

В моем случае каждый запрос должен быть перенаправлен на мой фронт-контроллер (который затем анализирует URI), поэтому это было действительно просто.