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

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

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

现在,当我写这个问题的时候,我做了一些调查,发现,如果我开始debugging会话几秒钟,然后停止它,然后重新开始 – 它正常启动。 似乎问题出现一段时间后积极debugging。

我的系统和应用程序:Debian squeeze: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

我的configuration:

  1. nginx基本configuration: https : //gist.github.com/MihanEntalpo/6229801
  2. nginx网站configuration文件: https : //gist.github.com/MihanEntalpo/6229781
  3. fastcgi_params文件: https : //gist.github.com/MihanEntalpo/d93fd4105573e1eda56f
  4. php-fpm池configuration文件: https : //gist.github.com/MihanEntalpo/6229820
  5. php-fpm xdebugconfiguration文件: https ://gist.github.com/MihanEntalpo/6229836
  6. netbeans:选项,这与Apache服务器是一样的:
    • 在第一行中断= OFF
    • popup窗口中的评估= ON
    • 显示请求的URL = ON
    • 端口= 9000

logging在nginx的错误日志文件中,当它不能等待被debugging的脚本,或者其他被脚本3locking的脚本时,提前提到:

2013/08/14 14:40:16 [error] 4822#0:* 111上行超时(110:连接超时),从上游读取响应头,客户端:192.168.100.1,server:intranet.local,request: “GET /adminer.php?username=root&db=devel&table=user HTTP / 1.1”,上游:“fastcgi://127.0.0.1:9999”,主机:“intranet.local”,referrer:“ https:// intranet。本地/ adminer.php?用户名= root&db = devel “

PHP-FPM的日志不包含任何错误消息…

我不喜欢用我的问题打扰任何人,总是试图自己解决。 但在这种情况下,我正在与这些人争取了一些月没有运气…如果有人遇到这个问题,或者有工作configuration使用与Nginx + PHP-FPM + XDEBUG + NetBeans的 – 请帮助我:)

Solutions Collecting From Web of "nginx php-fpm xdebug netbeans只能启动一个debugging会话"

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

  1. 第一个问题(504错误)可以通过nginx选项fastcgi_read_timeout解决,例如,它可以是fastcgi_read_timeout 600; 告诉nginx它应该等待600秒。 它应该放在主机的配置文件中,或者放在/ etc / nginx / fastcgi_params(在Debian中)
  2. 第二个问题是由我的xdebug.conf中的选项引起的: xdebug.remote_autostart=1; ,它应该是xdebug.remote_autostart=0; 。 我不明白这个选项的真正意义,但它确实如下:任何PHP脚本自动尝试连接到调试器(在我的情况下是NetBeans的)。 所以,在某些情况下,netbeans会失去连接,而当我按“开始调试”时,它不知道,应该打开新的连接,并永远等待xdebug客户端。 现在,用上面提到的选项,我可以随时启动和停止调试。
  3. 第三个问题与第二个问题具有相同的来源。 在我的服务器上运行的所有其他脚本都试图连接到netbeans,但连接丢失是没有意义的。

无论如何,我希望这会帮助那些想要解决类似问题的人。 StackOverflow帮助我强迫我明确描述我的问题,在这个过程中,我已经获得了关于尝试的新想法。

在更新fastcgi_read_timeout时,你可以增加服务器上所有站点的时间限制(在我的情况下为vagrant homestead虚拟机),你可以在SSH进入你的虚拟机后执行以下操作:

 sudo pico /etc/nginx/nginx.conf 

并添加

 fastcgi_read_timeout 300; 

到http部分。