我有一个PHP服务器,通过PHP-FPM运行,并通过nginx在端口7000
上以fastcgi方式提供服务。此应用程序已经被docker化,并作为运行中的容器运行,例如my_api。
my_api
docker容器可以直接通过端口7000
进行连接(用于检查),也可以通过另一个容器进行连接,该容器作为nginx反向代理,使用upstreams在适当位置的proxy_pass
指令下公开my_api
应用程序(和其他应用程序)的端口80
和443
(端口 80
重定向到SSL)。
如果我使用dbgp
在端口9000
上直接针对从http://localhost:7000提供的文件启动XDebug会话,我可以看到正确建立调试会话并进行调试。
但是,如果我尝试针对nginx反向代理提供的URL启动XDebug会话,例如https://localhost/my-api,则调试会话似乎没有启动,或者至少它没有正确创建连接(我的IDE中没有触发断点等)。
如何为通过nginx反向代理发出的请求建立XDebug会话?
为了回答这个问题,下面是我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
NB:我尝试了几种不同的配置来使它工作,包括启动运行dbgpproxy的Docker容器,但是似乎没有什么可以让我调试通过反向代理传递的请求。然而,这些尝试所使用的配置很可能是错误的。
我有一些关于我的问题可能是什么的理论,其中怀疑通过remote_connect_back
配置属性将反向代理的IP地址传递给XDebug。
非常感谢任何帮助或洞察力,以正确配置XDebug使其能够与通过nginx代理传递到上游服务器的请求一起工作!
如果需要,我可以提供更多细节!
xdebug.remote_connect_back=1
-- make it =0
and use proper host/IP inxdebug.remote_host
- LazyOne