我在标准 REST API 前面安装了 Varnish。请求必须使用 X-Access-Token 标头进行身份验证。我现在需要根据使用的访问令牌跟踪每个资源的请求。例如,令牌 abcd1234 请求了 /items/xyz 10 次。
最初我只是打算计算后端应用程序(PHP)中的数据,但后来意识到 Varnish 当然会拦截第一个之后的任何请求。
跟踪令牌请求的最佳方法是什么?
目前,我正在考虑在单独的线程中读取 varnishlog/varnishncsa,或者添加类似 Redis VMOD 的东西并让它根据 token:url 增加一个计数器。
还有人做过类似的事情吗?
答案1
我认为这里有三个合理的选择:
使用Varnish 自定义统计. VCS 是清漆加而且它专门为解决您所描述的用例而设计。如果您使用 Varnish Plus,这就是您的选择。
使用 varnishog / varnishncsa 和一些脚本将计数器转储到某些外部数据库。
使用 Redis 或 Memcached VMOD。与选项 (2) 相比,这会给每个请求增加一些可忽略不计的开销,但您将节省一些 I/O,并且可以避免实现/维护脚本。如果不能使用 VCS,我认为这是最好的替代方案。
答案2
我建议你让 varnish 做它最擅长的事情,缓存,并让 varnishog/ncsa 完成跟踪
通过添加 Redis Vmod,您将增加 vcl 的复杂性,并且如果由于某些原因您的 redis 出现故障,您将失去跟踪。
使用 varnishlog/ncsa,您可以在 varnish 之外构建跟踪逻辑,通过管道传输 varnishlog 进程实时处理日志或存储日志以供以后使用。