【问题标题】:What is the best way to debug a VCL file?调试 VCL 文件的最佳方法是什么?
【发布时间】:2011-12-08 19:17:39
【问题描述】:

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

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

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

问题:无论如何我都可以调试内联 C 或 403 varnish 的响应?

【问题讨论】:

    标签: varnish geoip varnish-vcl


    【解决方案1】:

    一般来说,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 状态很有可能来自您的网络服务器(后端)。

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

    【讨论】:

    • 感谢您的回复。它帮助很大,我能够摆脱内联 C 块中的一些问题。现在我遇到了 GeoIPCity 库的问题。我在这里创建一个新问题:stackoverflow.com/questions/8659331/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2010-11-23
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多