Nginx + php-fpm:仅在xdebug服务器运行时出现错误的网关

时间:2016-05-28 16:34:11

标签: php nginx intellij-idea docker xdebug

问题

当xdebug服务器从IntelliJ IDEA运行时,当我尝试加载我的站点以触发断点时,我从nginx获得502 Bad Gateway

如果我停止xdebug服务器,该网站将按预期工作。

所以,我无法运行调试器,但之前确实有效(!)。无法确定它突然停止工作的原因。

设置

设置的简短说明(如果我需要对此进行扩展,请告诉我。)

我的php应用程序在docker容器中运行,它使用docker compose config中的volumes_from链接到在不同容器中运行的nginx。

启动应用程序后,我可以使用phpinfo();验证xdebug模块已加载。

我的xdebug.ini包含以下内容:

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=10.0.2.2
xdebug.remote_connect_back=0
xdebug.remote_port=5555
xdebug.idekey=complex
xdebug.remote_handler=dbgp
xdebug.remote_log=/var/log/xdebug.log
xdebug.remote_autostart=1

我通过以下步骤获取了remote_host(运行xdebug服务器)的ip地址:

docker-machine ssh default
route -n | awk '/UG[ \t]/{print $2}' <-- Returns 10.0.2.2

为了验证我可以从我的php容器中访问调试服务器,我执行了以下步骤

docker exec -it randomhash bash
nc -z -v 10.0.2.2 5555

根据xdebug服务器的运行情况提供以下输出:

  • 正在运行:Connection to 10.0.2.2 5555 port [tcp/*] succeeded!
  • 未开始运行:nc: connect to 10.0.2.2 port 5555 (tcp) failed: Connection refused

因此,IntelliJ IDEA肯定会设置为在5555上接收连接。我还在源文件路径和远程路径之间进行了适当的路径映射(在IDEA中设置PHP远程调试服务器时)。

有什么想法吗?由于我对这些技术中的任何一种技术都没有多少经验,所以对这一点感到很遗憾:D

1 个答案:

答案 0 :(得分:1)

这有时会发生,原因是php-fpm和xdebug(确切地说)中的错误! 当我重构我的同事代码时,项目的页面返回502 Bad Gateway
这是我发现的:

PHP-fpm.log
WARNING: [pool www] child 158 said into stderr: "*** Error in `php-fpm: pool www': free(): invalid size: 0x00007f1351b7d2a0 ***" ........ ........ WARNING: [pool www] child 158 exited on signal 6 (SIGABRT - core dumped) after 38.407847 seconds from start

我找到了导致错误的一段代码:

ob_start();
$result = eval("?>".$string."<"."?p"."hp return 1;");
$new_string = ob_get_clean();

但这不是全部。该错误仅发生在某个状态$string,乍一看,与其他状态没有差别。就我而言,一切都很简单。我删除了导致错误的代码。这不会影响网页的功能。我继续进一步调试代码。