调试 VCL 文件的最佳方法是什么?

发布于 2024-12-20 09:42:11 字数 368 浏览 5 评论 0原文

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

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

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

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

I am writing inline C in my VCL file. More specifically I am using Maxmind's GeoIP database to geocode a visitor's IP. I have everything installed, I have followed all the wiki examples for GeoIP database and everything works swimmingly.

I am trying to now do some magic with GeoIP besides the return country examples. I want to return the visitor's city using the method GeoIP_record_by_addr(), which returns a pointer.

Problem: I cannot seem to correctly cast a GeoIPRecord* to char*. I have tried for hours. I get Varnish to compile my VCL file without any errors or notices, but the varnish server responds with 403.

Question: Anyway I can debug either the inline C or the 403 varnish is responding with?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖哒 2024-12-27 09:42:11

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

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

如果您想调试内联 C,您还可以使用标头 (VRT_SetHdr()),但如果您的 C 代码导致 varnish 崩溃,您将在 /var/log/messages 中看到原因。

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

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

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

不管怎样,你的清漆似乎没有崩溃,而是有行为问题。

Generally, Firebug and varnishlog will be your best friends.

If you want to debug pure VCL, the best way is to send data into HTTP headers ([req/bereq/beresp/resp].http.[header name]) and check their value into Firebug (or varnishlog if you have few requests).

If you want to debug inline C, you can also play with headers (VRT_SetHdr()) but if your C code makes varnish crash, you'll see why into /var/log/messages.

You can also check varnishlog to see if varnish crashes...but when varnish crashes, you get timeouts, not 403...

I'd have to see your VCL to understand why you get 403 but technically, it's not an "error", but a "status", meaning that your request has been processed by varnish (and, unfortunately, forbidden somewhrere).

I don't think Varnish would return 403 except if you ask him to do it. So there's a big chance the 403 status comes from your web server (backend).

Anyway, your varnish doesn't seem to crash but rather have behavior issues.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文