2013-08-30 21 views
12

La mia situazione è la seguente:Come abilitare xdebug con nginx?

ho un VM (server Ubuntu 13.04) con PHP 5.4.9-4ubuntu2.2, nginx/1.2.6, php5-fpm e Xdebug v2.2.1.

Sto sviluppando un'applicazione utilizzando PhpStorm 6.0.3 (che distribuisco sulla VM).

Il mio problema è che ogni volta che provo ad avviare una sessione di debug, l'IDE non riceve mai una richiesta di connessione dal server web (e quindi la sessione non parte mai).

Ho esaminato un sacco di consigli sulla configurazione di xdebug e non ho trovato nulla di utile.

Quello che ho capito di recente è che se imposto il cookie XDEBUG_SESSION tramite il browser (Grazie FireCookie) posso eseguire il debug della mia app ... quindi suppongo che ci sia qualcosa che impedisce al server web di inviare i cookie al client.

Il fatto è che sto utilizzando la stessa configurazione IDE in un progetto diverso, che viene distribuito in una diversa VM basata su CentOS (con lighttpd) e funziona perfettamente.

ho cercato di distribuire il mio progetto in corso in tale VM (cambiando il server web per Nginx) e ha funzionato allright (Purtroppo ho perso che VM e non riesco a controllare la configurazione :().

Quindi ... ecco il mio config 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:

01.235.
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 

Qualsiasi idea sarà molto apprezzata. Grazie!

EDIT:

Un'altra cosa che ho provato è stato quello di avviare una sessione da PHP e ho visto che il cookie di sessione è stato creato senza alcun problema ...

secondo Edit:

penso io trovato dove si trova il problema: l'URI.

Ho scritto un altro script per provare i parametri di configurazione e roba (molto più semplice), e ha funzionato subito !.

Quindi alla fine ho capito che il problema era che i parametri della query (ad esempio XDEBUG_SESSION_START=14845) non raggiungevano il mio script.

Il problema è il mio URI iniziale, che ha il formato /images/P/P1/P1010044-242x300.jpg. Attraverso alcune configurazioni di host virtuali dovrei essere in grado di indirizzarlo a qualcosa del genere /dispatch.php/images/P/P1/P1010044-242x300.jpg e utilizzare il resto dell'URI come parametri. Quindi ... Non ho trovato una soluzione di per sé, ma ora ho una valida soluzione (puntando il mio URL iniziale a /dispatch.php) che lo farà per un po '. Grazie

risposta

6

Nel caso ci fosse qualcuno che sta leggendo questo ... l'ho capito!

Il problema era la configurazione di nginx.Avevo appena copiato un modello da qualche parte, ma ora ho letto un po 'di più e ho scoperto che la mia particolare configurazione era molto più semplice:

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

Nel mio caso, ogni richiesta deve essere inoltrata al mio front-controller (che poi analizza l'URI), quindi è stato davvero semplice.