gpt4 book ai didi

php - 如何在 nginx 反向代理后面将 XDebug 与 PHP 上游一起使用?

转载 作者:IT老高 更新时间:2023-10-28 21:21:10 26 4
gpt4 key购买 nike

我有一个通过 PHP-FPM 运行的 PHP 服务器,它通过端口 7000 上的 nginx 与 fastcgi 一起提供服务。此应用程序已被 docker 化并作为运行容器运行,例如my_api

my_api docker 容器可以通过端口 7000 直接连接(用于完整性检查),也可以通过另一个容器作为使用上游的 nginx 反向代理通过端口 80443(端口 80 重定向到 SSL)上公开 my_api 应用程序(和其他) proxy_pass 指令在适当的位置下。

如果我在端口 9000 上使用 dbgp 直接针对从 http://localhost:7000 提供的文件启动 XDebug session 我可以看到调试 session 正确建立并且可以调试。

但是,如果我尝试针对 nginx 反向代理提供的 URL 启动 XDebug session ,例如https://localhost/my-api ,调试 session 似乎没有启动,或者至少它没有正确创建连接(在我的 IDE 中没有遇到断点等)。

如何为通过 nginx 反向代理发出的请求建立 XDebug session ?

出于这个问题的目的,下面是我的 docker-compose.yml 配置和 xdebug.ini 的(相关)示例:

docker-compose.yml:

version: "2"

services:
api:
build: <path_to_dockerfile>
ports:
- 7000:7000
#- 9000:9000 # may be uncommented for direct debugging access
nginx_proxy:
build: <path_to_dockerfile>
links:
...
- api:api
ports:
- 80:80
- 443:443

xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=true
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_autostart=0

注意:我已经尝试了几种不同的配置来尝试使其正常工作,包括启动一个运行 dbgpproxy 的 Docker 容器。但似乎没有什么可以让我调试通过反向代理的请求。尽管我用于这些尝试的配置很可能是错误的。

关于我的问题可能是什么,我有一些理论,其中怀疑是通过 remote_connect_back 配置属性与 XDebug 通信的反向代理的 IP 地址。

任何有关如何正确配置 XDebug 以处理通过 nginx 代理传递到上游服务器的请求的帮助或见解将不胜感激!

如果有帮助,我可以提供更多详细信息!

最佳答案

以下是我如何让 PHP Storm 连接到 dockerized php-fpm/nginx 应用程序:

将远程主机IP注入(inject)容器。在您的主机中,设置变量:

XDEBUG_HOST=$(ipconfig getifaddr en0)

我对 docker-compose 不太熟悉。我正在使用 Kubernetes list ,但我确信有办法注入(inject)环境变量。

在 xdebug.ini 中:

xdebug.remote_host=${XDEBUG_HOST}

现在您应该能够设置您的 xdebug 客户端以监听 xdebug.remote_port 以进行调试连接。您还必须在 PHP Storm 或您使用的任何指向 http://127.0.0.1:8080 的 IDE 中设置调试服务器。 (或您将 nginx 容器端口转发到的任何端口)。

这是我的设置的样子。我正在使用 PHP Storm,但我相信您可以将其应用于其他 xdebug 客户端。

PHP Storm Xdebug server settings

PHP Storm preferences

xdebug.ini:

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_port=10000
xdebug.remote_autostart=1
xdebug.idekey=www-data
xdebug.remote_host=${XDEBUG_HOST}

引用:https://shippingdocker.com/xdebug/

关于php - 如何在 nginx 反向代理后面将 XDebug 与 PHP 上游一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com