过去,我使用apache+mod_php +xdebug+netbeans 来开发我的网站(服务器是我的本地机器,运行 Debian Squeeze),很高兴 - xdebug 按预期工作,调试会话可以随时启动和停止,当我需要它的时候。但是,当我转到nginx+php_fpm +xdebug+netbeans 时,我遇到了一些调试问题。
- 我的调试会话可能很长(超过 30 秒),似乎 nginx 不能等待这么久,它显示"504 Gateway timeout error"。我已经尝试了很多解决这个问题的建议,但没有运气。虽然,这对我来说不是很重要,因为调试会话本身会继续运行,这只是一个有点不舒服的事情。
- 我的调试会话只能运行一次,因此,如果我停止它并尝试再次启动调试,netbeans 将无法接受来自 xdebug 的连接(它会写“等待 xdebug 连接”并且它是永远的)。重新启动 netbeans 后,调试会话可以再次正常启动。
- 在某些情况下,我无法理解,调试是“为所有 php 脚本打开”并阻止任何其他脚本运行。例如,我在我的网站的http://mysite.local/index.php上启动调试会话并使用它。一段时间后,我注意到我的管理员(位于 intranet.local/ adminer.php上)没有运行,浏览器尝试加载页面一段时间,然后显示“504 网关超时错误”。如果我看到这种行为,我可以停止 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存储库)netbeans:7.3
我的配置:
- nginx 基本配置:https ://gist.github.com/MihanEntalpo/6229801
- nginx网站配置文件:https ://gist.github.com/MihanEntalpo/6229781
- fastcgi_params 文件:https ://gist.github.com/MihanEntalpo/d93fd4105573e1eda56f
- php-fpm 池配置文件:https ://gist.github.com/MihanEntalpo/6229820
- php-fpm xdebug 配置文件:https ://gist.github.com/MihanEntalpo/6229836
- netbeans:选项,与 apache 服务器相同:
- 第一行中断 = OFF
- 弹出窗口中的评估 = ON
- 显示请求 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.本地/adminer.php?username=root&db=devel "
php-fpm 的日志不包含任何错误消息...
我不喜欢用我的问题打扰任何人,总是试图自己解决。但在这种情况下,我在几个月内与这些人战斗,但没有运气......如果有人遇到这个问题,或者有与 nginx+php-fpm+xdebug+netbeans 一起使用的工作配置 - 请帮助我 :)