如何使用nginx启用xdebug?

时间:2013-08-30 19:47:38

标签: nginx xdebug

我的情况如下:

我有一个VM(Ubuntu服务器13.04),PHP 5.4.9-4ubuntu2.2,nginx / 1.2.6,php5-fpm和Xdebug v2.2.1。

我正在使用PhpStorm 6.0.3(我在VM上部署)开发应用程序。

我的问题是,每当我尝试启动调试会话时,IDE都不会从Web服务器获取连接请求(因此,会话永远不会启动)。

我查看了很多关于xdebug配置的建议,但没有发现任何有用的东西。

我最近意识到,如果我通过浏览器自己设置XDEBUG_SESSION cookie(感谢FireCookie),我可以调试我的应用程序......所以我的猜测就是保持网络服务器不将cookie发送回客户端。< / p>

问题是,我在不同的项目中使用相同的IDE配置,该项目部署到基于CentOS的不同VM(使用lighttpd),并且工作正常。

我尝试将我当前的项目部署到这样的VM中(将Web服务器更改为NginX)并且它工作正常(不幸的是我丢失了该VM并且无法检查配置:()。

所以......这是我的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

任何想法都会非常感激。谢谢!

编辑:

我尝试的另一件事是从php启动会话,我发现会话cookie创建没有任何问题...

第二次编辑:

我想我发现了问题所在:URI。

我编写了另一个脚本,以便尝试配置参数和内容(更简单一个),并且它可以正常工作!。

所以最终我认为问题是查询参数(即:XDEBUG_SESSION_START=14845)没有到达我的脚本。

问题是我的起始URI,其格式为/images/P/P1/P1010044-242x300.jpg。通过一些虚拟主机配置,我应该能够将它路由到类似/dispatch.php/images/P/P1/P1010044-242x300.jpg之类的东西,并使用URI的其余部分作为参数。所以...我本身没有找到解决方案,但现在我有一个可行的解决方法(将我的起始URL指向/dispatch.php),这将暂时执行。感谢

1 个答案:

答案 0 :(得分:6)

以防万一有人在读这篇文章......我知道了!

问题是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),所以它非常简单。