【问题标题】:nginx php-fpm xdebug netbeans can start only one debug sessionnginx php-fpm xdebug netbeans 只能启动一个调试会话
【发布时间】:2013-08-16 06:56:09
【问题描述】:

过去,我很高兴使用 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 Gateway timeout error” .如果我看到这种行为,我可以停止 netbeans 中的 xdebug 调试会话,并且所有其他脚本开始正常运行。

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

我的系统和应用程序: 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 存储库) 网豆:7.3

我的配置:

  1. nginx 基本配置: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 池配置文件:https://gist.github.com/MihanEntalpo/6229820
  5. php-fpm xdebug 配置文件:https://gist.github.com/MihanEntalpo/6229836
  6. netbeans:选项,与 apache 服务器相同:
    • 第一行中断 = 关闭
    • 弹出窗口中的评估 = 开启
    • 显示请求 URL = ON
    • 端口 = 9000

记录在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 一起使用的工作配置 - 请帮助我:)

【问题讨论】:

    标签: debugging nginx netbeans-7 xdebug php


    【解决方案1】:

    感谢所有试图按照我的问题方向思考的人。 我已经成功解决了。

    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 通过强迫我明确地描述我的问题来帮助我,并且在这个过程中我获得了关于尝试什么的新想法。

    【讨论】:

    • xdebug.remote_autostart 应该不是问题,这对于零配置调试至关重要,您只需为调试会话分配更多连接
    【解决方案2】:

    更新 fastcgi_read_timeout 时,您可以增加服务器上所有站点的时间限制(在我的例子中是 vagrant homestead 虚拟机),一旦您通过 SSH 连接到您的虚拟机,您就可以执行以下操作:

    sudo pico /etc/nginx/nginx.conf
    

    并添加

    fastcgi_read_timeout 300;
    

    到 http 部分。

    【讨论】:

      【解决方案3】:

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

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

      解决方案是将这两个应用程序移到垃圾箱,因为我没有必要的管理员权限来禁用应用程序设置中的过滤。

      【讨论】:

      • 另外,应该提到的是,该端口可能被 iptables 阻塞,或被其他应用程序使用
      猜你喜欢
      • 2011-10-21
      • 2013-10-03
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多