2013-08-30 18 views
12

Moja sytuacja jest następująca:Jak włączyć xdebug z nginx?

mam VM (Ubuntu Server 13.04) z PHP 5.4.9-4ubuntu2.2, nginx/1.2.6, php5-fpm i Xdebug v2.2.1.

Zajmuję się tworzeniem aplikacji przy użyciu PhpStorm 6.0.3 (którą wdrażam na maszynie wirtualnej).

Mój problem polega na tym, że za każdym razem, gdy próbuję uruchomić sesję debugowania, IDE nigdy nie otrzymuje żądania połączenia z serwera sieciowego (w związku z tym sesja nigdy się nie uruchamia).

Przejrzałem wiele zaleceń dotyczących konfiguracji xdebug i nie znalazłem nic przydatnego.

Ostatnio zdałem sobie sprawę, że jeśli sam ustawię plik cookie XDEBUG_SESSION przez przeglądarkę (dzięki FireCookie), mogę debugować moją aplikację ... więc domyślam się, że jest coś, co powstrzymuje serwer od wysyłania pliku cookie do klienta.

Chodzi o to, że używam tej samej konfiguracji IDE w innym projekcie, który jest wdrażany w innej maszynie wirtualnej opartej na CentOS (z lighttpd) i działa dobrze.

Próbowałem wdrażania mój obecny projekt do takiego VM (zmiana serwera WWW do nginx) i to działało w porządku (Niestety straciłem tę maszynę wirtualną i nie może sprawdzić config :().

Więc ... oto moja nginx config:

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 

Każdy pomysł zostanie doceniony. Dzięki!

EDIT:

Inną rzeczą próbowałem było rozpocząć sesję z PHP i widziałem, że plik cookie sesji został stworzony bez problemu ...

2-te Edit:

myślę gdzie znajduje się problem: URI.

Napisałem kolejny skrypt, aby wypróbować parametry konfiguracyjne i inne (o wiele prostsze) i działało to od razu!

W końcu doszłam do wniosku, że problem polegał na tym, że parametry zapytania (tj. XDEBUG_SESSION_START=14845) nie dotarły do ​​mojego skryptu.

Problem to mój początkowy identyfikator URI, który ma postać /images/P/P1/P1010044-242x300.jpg. Przez jakąś konfigurację wirtualnego hosta powinienem być w stanie skierować ją na coś podobnego do /dispatch.php/images/P/P1/P1010044-242x300.jpg i użyć reszty identyfikatora URI jako parametrów. Tak więc ... Nie znalazłem rozwiązania per se, ale teraz mam wykonalne obejście (wskazując mój początkowy adres URL na /dispatch.php), który zrobi to przez jakiś czas. Dzięki

Odpowiedz

6

Na wszelki wypadek ktoś czyta to ... Mam to!

Problemem była konfiguracja nginx.I właśnie skopiowany szablon skądś, ale teraz czytam trochę więcej i okazało się, że mój szczególności config była znacznie prostsza:

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

W moim przypadku, każdy wniosek musi zostać przekazany do mojego przedniego kontrolera (który następnie analizuje URI), więc było to naprawdę proste.