php - Nginx + php-fpm : Bad gateway only when xdebug server is running

标签 php nginx intellij-idea docker xdebug

问题

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

如果我停止 xdebug 服务器,该站点将按预期运行。

所以,我无法运行调试器,但它之前确实可以工作(!)。无法查明为什么它突然停止工作。

设置

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

我的 php 应用程序在 Docker 容器中运行,并且使用 docker compose 配置中的 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 服务器是否运行提供以下输出:

  • 正在运行:连接到 10.0.2.2 5555 端口 [tcp/*] 成功!
  • 未运行:nc:连接到 10.0.2.2 端口 5555 (tcp) 失败:连接被拒绝

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

有什么想法吗?有点迷失在这方面,因为我对这些技术都没有太多经验:D

最佳答案

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

php-fpm.log
警告:[pool www]子 158 对 stderr 说:“*** ‘php-fpm: pool www’中的错误:free():无效大小:0x00007f1351b7d2a0 ***” ………… ………… 警告:[pool www]子进程 158 在信号 6(SIGABRT - 核心转储)上退出 38.407847 秒后开始

我发现了一段导致错误的代码:

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

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

关于php - Nginx + php-fpm : Bad gateway only when xdebug server is running,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501419/

相关文章:

php - 如何检测动画 GIF 的每秒滴答声?

php - 如何检测客户端机器上的打印机?

php - 在 php 中选择查询 mysql 之后运行插入查询

nginx - 将来自 cloudrun 服务的请求镜像到其他 cloudrun 服务

nginx - Nginx仅在根域时重写

nginx - 子域是通过域名注册商还是网络服务器创建的?

intellij-idea - 如何从 Intellij IDEA 为 JAX-WS 提供 "wsimport"参数

java - Gradle、IntelliJ 和 ScalaTest 插件 : suddenly broken

php - 多重排序子数组——包含范围数据的子数组

intellij-idea - 将 'Google'设为所有项目PyCharm的默认文档字符串样式