我在我的VCL文件中写入内联C.更具体地说,我使用Maxmind的GeoIP数据库对访问者的IP进行地理编码。我安装了所有东西,我已经按照GeoIP数据库的所有wiki示例进行操作,并且一切都在顺利进行。
除了返回国家的例子,我现在试着用GeoIP做一些魔术。我想使用GeoIP_record_by_addr()方法返回访问者的城市,该方法返回一个指针。
问题:我似乎无法正确地将GeoIPRecord *转换为char *。我试了几个小时。我得到Varnish编译我的VCL文件没有任何错误或通知,但varnish服务器响应403.
问题:无论如何,我可以调试内联C或403清漆响应?
答案 0 :(得分:3)
一般来说,Firebug和varnishlog将是你最好的朋友。
如果要调试纯VCL,最好的方法是将数据发送到HTTP头([req / bereq / beresp / resp] .http。[header name])并将其值检入Firebug(或varnishlog,如果你请求很少。)
如果你想调试内联C,你也可以使用标题(VRT_SetHdr()),但如果你的C代码使varnish崩溃,你会看到为什么进入/ var / log / messages。
您还可以检查varnishlog以查看varnish是否崩溃...但是当清漆崩溃时,您会收到超时,而不是403 ......
我必须看到你的VCL才能理解为什么你会得到403,但从技术上来说,这不是一个“错误”,而是一个“状态”,这意味着你的请求已被清漆处理(不幸的是,禁止了一些)
除非你要求他这样做,否则我认为Varnish不会返回403。因此,403状态很可能来自您的Web服务器(后端)。
无论如何,你的清漆似乎没有崩溃,而是有行为问题。