nginx – 忽略Varnish VCL中的GET参数

前端之家收集整理的这篇文章主要介绍了nginx – 忽略Varnish VCL中的GET参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

好的:我有一个站点设置,其中包含我们向开发人员公开的一些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;
}
原文链接:https://www.f2er.com/nginx/435274.html

猜你在找的Nginx相关文章