加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

nginx – 忽略Varnish VCL中的GET参数

发布时间:2020-12-13 21:14:01 所属栏目:Nginx 来源:网络整理
导读:好的:我有一个站点设置,其中包含我们向开发人员公开的一些API,这些API采用的格式 /api/item.xml?type_ids=34,35,37region_ids=1000002,1000003key=SOMERANDOMALPHANUM 在此URI中,始终设置type_ids,region_ids和key是可选的. 需要注意的重要一点是,关键变量

好的:我有一个站点设置,其中包含我们向开发人员公开的一些API,这些API采用的格式

/api/item.xml?type_ids=34,35,37&region_ids=1000002,1000003&key=SOMERANDOMALPHANUM

在此URI中,始终设置type_ids,region_ids和key是可选的.

需要注意的重要一点是,关键变量不会影响响应的内容.它用于内部跟踪请求,因此我们可以识别发出缓慢或不需要的请求的人.

在Varnish,我们有一个像这样的VCL:

if (req.http.host ~ "the-site-in-question.com") {
  if (req.url ~ "^/api/.+.xml") {
    unset req.http.cookie;
  }
}

我们只是删除cookie并让后端完成其余的事情(这是一个hackaround,因为Rails / authlogic发送带有API响应的会话cookie).

目前,任何不同的开发人员基本上都会遇到不同的缓存,因为& key = SOMEALPHANUM被认为是用于存储的Varnish哈希的一部分.这显然不是一个很好的解决方案,我正试图找出如何告诉Varnish忽略URI的那一部分.

最佳答案
如果你需要将key = SOMEALPHANUM保留在后端以防万一没有从缓存中传递,那么最好在vcl_hash函数中调用regsub,因为这不会真正改变url,而只是改变了hash的哈希值.钥匙.

sub vcl_hash {
  if(req.http.host ~ "the-site-in-question.com" & req.url ~ "^/api/") {
    set req.http.X-Sanitized-URL = req.url;
    set req.http.X-Sanitized-URL = regsub(req.http.X-Sanitized-URL,"&key=[A-Za-z0-9]+","");
    set req.hash += req.http.X-Sanitized-URL;
  } else {
    set req.hash += req.url;
  }
  set req.hash += req.http.host;
  hash;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读