【问题标题】:How to enable xdebug with nginx?如何使用 nginx 启用 xdebug?
【发布时间】:2013-08-30 19:47:37
【问题描述】:

我的情况如下:

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

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

我的问题是,每当我尝试启动调试会话时,IDE 永远不会收到来自网络服务器的连接请求(因此,会话永远不会启动)。

我浏览了很多关于 xdebug 配置的建议,发现没有任何用处。

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

问题是,我在不同的项目中使用相同的 IDE 配置,该配置被部署到不同的基于 CentOS 的 VM(使用 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 配置(/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),它会做一段时间。谢谢

【问题讨论】:

    标签: nginx xdebug


    【解决方案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),所以这非常简单。

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 2020-04-06
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多