nginx php-fpm xdebug netbeans只能启动一个调试会话

时间:2013-08-14 10:51:26

标签: debugging nginx netbeans-7 xdebug php

在过去,我使用 apache + mod_php + xdebug + netbeans进行开发我的网站(服务器是我的本地机器,运行Debian Squeeze),很高兴 - xdebug工作正常,当我需要时,调试会话可以随时启动和停止。但是,当我转移到 nginx + php_fpm + xdebug + netbeans时,我遇到了一些调试问题。

  1. 我的调试会话可能很长(超过30秒)看来,nginx无法等待这么长时间,它显示“504网关超时错误”。我已经尝试了很多解决这个问题的建议,但没有运气。虽然,这对我来说不是很重要,因为调试会话本身继续运行,这只是一件令人不舒服的事情。
  2. 我的调试会话只能运行一次,因此,如果我停止它,并尝试再次启动调试,netbeans无法接受来自xdebug的连接(它写入“等待xdebug连接”并且它是永远的)。重新启动netbeans后,可以正常重新启动调试会话。
  3. 在我遇到的情况下,我无法理解,调试是“打开所有php脚本”并阻止其他任何脚本运行。例如,我在我的网站http://mysite.local/index.php上启动调试会话并使用它。过了一段时间,我注意到,我的 adminer (放在intranet.local / adminer.php上)没有运行,浏览器尝试加载页面一段时间,而不是显示“504网关超时错误” 。如果我看到这种行为,我可以在netbeans中停止xdebug调试会话,并且所有其他脚本开始正常运行。
  4. 现在,当我写这个问题时,我做了一些调查,发现,如果我启动调试会话几秒钟,之后停止它,然后重新开始 - 它会正常启动。似乎问题出现在一段时间的主动调试之后。

    我的系统和应用: Debian挤压:2.6.32-5-686 Nginx:1.4.1(来自dotdeb存储库) php5-fpm:5.3.26-1~d(来自dotdeb存储库) php5-xdebug:5.3.26-1~d(来自dotdeb存储库) netbeans:7.3

    我的配置:

    1. nginx base config:https://gist.github.com/MihanEntalpo/6229801
    2. nginx网站配置文件:https://gist.github.com/MihanEntalpo/6229781
    3. fastcgi_params档案:https://gist.github.com/MihanEntalpo/d93fd4105573e1eda56f
    4. php-fpm pool配置文件:https://gist.github.com/MihanEntalpo/6229820
    5. php-fpm xdebug配置文件:https://gist.github.com/MihanEntalpo/6229836
    6. netbeans:options,与apache服务器完全相同:
      • 第一行中断=关闭
      • 弹出窗口中的评估=开启
      • 显示请求网址=开启
      • Port = 9000
    7. 在nginx的错误日志文件中记录,当它无法等待被调试的脚本时,或者由问题#3锁定的其他脚本,提前提到:

      2013/08/14 14:40:16 [错误] 4822#0:* 111上游超时(110:连接超时)从上游读取响应头,客户端:192.168.100.1,服务器:intranet.local ,请求:“GET /adminer.php?username=root&db=devel&table=user HTTP / 1.1”,上游:“fastcgi://127.0.0.1:9999”,主机:“intranet.local”,引荐来源: “https://intranet.local/adminer.php?username=root&db=devel

      php-fpm的日志不包含任何错误消息......

      我不喜欢用我的问题打扰任何人,并且总是试图自己解决它。但在这种情况下,我正在与这些人争斗一些月没有运气...... 如果有人遇到这个问题,或者有使用nginx + php-fpm + xdebug + netbeans的工作配置 - 请帮帮我:)

3 个答案:

答案 0 :(得分:15)

谢谢大家,他们试图在我的问题方向思考。 我已经成功解决了。

  1. 第一个问题(504错误)可以通过nginx选项 fastcgi_read_timeout 来解决,例如,对于告诉nginx它应该等待600秒可能是fastcgi_read_timeout 600;。它应该放在主机的配置文件中,或者放在/ etc / nginx / fastcgi_params(在Debian中)
  2. 第二个问题是由我的xdebug.conf中的选项引起的:xdebug.remote_autostart=1;,它应该是xdebug.remote_autostart=0;。我不明白这个选项的真正含义,但它确实遵循:任何PHP脚本自动尝试连接到调试器(在我的情况下是netbeans)。因此,在某些情况下,netbeans失去连接,当我按下“开始调试”时,它不知道,应该打开新连接,并永远等待xdebug客户端。现在,通过上述选项,我可以在需要时随时启动和停止调试。
  3. 第三个问题与第二个问题具有相同的来源。在我的服务器上运行的所有其他脚本都试图连接到netbeans,但是连接丢失则没有意义。
  4. 无论如何,我希望这会帮助那些想要解决类似问题的人。 StackOverflow通过强迫我明确地描述我的问题来帮助我,在这个过程中我获得了关于尝试什么的新想法。

答案 1 :(得分:2)

更新fastcgi_read_timeout时,您可以增加服务器上所有站点的时间限制(在我的情况下为vagrant homestead VM),一旦您通过SSH连接到VM,就可以执行以下操作:

sudo pico /etc/nginx/nginx.conf

并添加

fastcgi_read_timeout 300;

到http部分。

答案 2 :(得分:0)

对于遇到相同问题但无法接受的答案的每个人,就我而言,这是最近安装的应用程序阻止了xdebug。

我的公司可以远程访问我的笔记本电脑上安装的安全软件,因此他们安装了ESET Endpoint Security.appESET Remote Administrator Agent.app,它们显然也过滤了本地主机连接。我花了两天时间才终于发现127.0.0.1:9000上有一个ESET守护程序正在运行并阻止连接。

解决方案是移到两个应用程序中,因为我没有必要的管理员权限才能在应用程序设置中禁用过滤。