如何在nginx中启用xdebug?

18

我的情况如下:

我有一个带有PHP 5.4.9-4ubuntu2.2、nginx/1.2.6、php5-fpm和Xdebug v2.2.1的虚拟机(Ubuntu服务器13.04)。

我正在使用PhpStorm 6.0.3开发应用程序(我将其部署在虚拟机上)。

我的问题是,每当我尝试启动调试会话时,IDE从Web服务器那里永远不会得到连接请求(因此,会话从未开始)。

我查看了很多关于xdebug配置的推荐,并没有找到有用的信息。

我最近意识到的是,如果我通过浏览器自己设置XDEBUG_SESSION cookie(感谢FireCookie),我就可以调试我的应用程序……所以我的猜测是有些东西阻止了Web服务器将cookie发送回客户端。

问题是,我在不同的基于CentOS的VM(带有lighttpd)中使用相同的IDE配置,在另一个项目中使用它,它完全正常。

我尝试将当前项目部署到这样的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 配置文件 (/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个回答

10

万一有人在读这篇文章……我解决了!

问题出在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),所以这很简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接