2

我在我的 VCL 文件中编写内联 C。更具体地说,我正在使用 Maxmind 的 GeoIP 数据库对访问者的 IP 进行地理编码。我已经安装了所有东西,我遵循了 GeoIP 数据库的所有 wiki 示例,并且一切正常。

除了返回国家/地区示例之外,我现在正在尝试使用 GeoIP 做一些魔术。我想使用返回指针的 GeoIP_record_by_addr() 方法返回访问者所在的城市。

问题:我似乎无法正确地将 GeoIPRecord* 转换为 char*。我已经尝试了几个小时。我让 Varnish 编译我的 VCL 文件而没有任何错误或通知,但 varnish 服务器以 403 响应。

问题:无论如何,我可以调试内联 C 或 403 清漆响应?

4

1 回答 1

4

一般来说,Firebug 和 varnishlog 将是你最好的朋友。

如果您想调试纯 VCL,最好的方法是将数据发送到 HTTP 标头([req/bereq/beresp/resp].http.[header name])并将它们的值检查到 Firebug(或 varnishlog,如果您有很少的请求)。

如果你想调试内联 C,你也可以使用头文件 (VRT_SetHdr()) 但是如果你的 C 代码导致 varnish 崩溃,你会在 /var/log/messages 中看到原因。

您还可以检查 varnishlog 以查看 varnish 是否崩溃...但是当 varnish 崩溃时,您会得到超时,而不是 403...

我必须查看您的 VCL 才能了解您为什么会收到 403,但从技术上讲,这不是“错误”,而是“状态”,这意味着您的请求已被 varnish 处理(不幸的是,被禁止了)。

我认为 Varnish 不会返回 403,除非您要求他这样做。因此,403 状态很有可能来自您的 Web 服务器(后端)。

无论如何,您的清漆似乎并没有崩溃,而是存在行为问题。

于 2011-12-09T22:26:39.320 回答