问题
当 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/