我正在尝试使用PHPStorm将Xdebug远程调试设置为位于Varnish后面的站点作为缓存层。
Varnish作为80端口的前端,Apache与8080端口的后端对话。
如果我绕过Varnish并直接与端口8080上的网站Xdebug和Phpstorm按预期工作,但是我并没有真正测试系统 - 我真正需要做的是即使请求也会触发调试会话通过Varnish代理。
显然我不希望缓存的内容触发调试会话,但仍然应该使用未缓存的内容。
我的Xdebug设置如下:
; xdebug
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.scream=0
xdebug.cli_color=1
xdebug.show_local_vars=1
答案 0 :(得分:3)
Xdebug支持尝试连接回自2.2.0以来在X_HTTP_FORWARDED_FOR中提供的IP(修复了2.2.2中的错误),请参阅错误#598& #660。根据您的Varnish版本,您可能需要添加标题,或者可能是由varnish设置的。
如果设置标题,原始配置应该有效。
加入vcl_recv
:
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
答案 1 :(得分:2)
像往常一样问这个问题暴露了答案......
似乎开箱即用的请求IP地址没有通过varnish映射到php $_SERVER[REMOTE_ADDR]
,所以启用remote_connect_back
Xdebug尝试连接不返回PHPStorm而是连接到清漆本身。
更改xdebug设置以显式设置remote_host解决了以下问题:
; xdebug
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.remote_host = 192.168.150.1
xdebug.remote_port = 9000
xdebug.scream=0
xdebug.cli_color=1
xdebug.show_local_vars=1
在这种情况下,它对我来说很好,因为我总是从192.168.150.1请求(这是我的开发虚拟机的主机)
我猜一个更通用的解决方案是将REMOTE_ADDR字段重新映射到原始IP而不是Varnish的IP。