当php应用程序位于Varnish后面时使用Xdebug

时间:2014-12-21 23:26:47

标签: php phpstorm xdebug varnish

我正在尝试使用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

2 个答案:

答案 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。