首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Varnish中为特定的请求设置req.connection_timeout?

有没有办法在Varnish中为特定的请求设置req.connection_timeout?
EN

Stack Overflow用户
提问于 2011-02-25 05:42:55
回答 5查看 2.9K关注 0票数 1

我在PHP机器前安装了一个Varnish。对于98%的页面,单个请求超时(VLC中的req.connect_timeout)有效。然而,我有几个页面,我们预计在它们超时之前需要3分钟。有没有办法在Varnish中为特定的请求设置req.connection_timeout?如果是的话,请给我看看VCL里的灯。我希望对所有页面都保持相同的req.connect_timeout,但对这几个特定页面提高这个数字。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-04 05:55:37

我认为connection_timeout限制了建立到后端的连接的时间,而first_byte_timeout和between_bytes_timeout限制了处理时间。您是否尝试过在vcl_recv中以编程方式设置bereq.first_byte_timeout?例如,像这样:

代码语言:javascript
复制
backend mybackend {
  .host = "127.0.0.1";
  .port = "8080";
  .connect_timeout = 100ms;
  .first_byte_timeout = 5s;
  .between_bytes_timeout = 5s;
}

sub vcl_recv {
  set req.backend = mybackend;
  if ( req.url ~ "/slowrequest" ) {
    # set req.connect_timeout = 180s; # old naming convention?
    set bereq.connect_timeout = 180s;
  }
  # .. do default stuff
}

如果有效的话请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2012-02-08 18:55:40

不幸的是,这不适用于清漆>3

非常可悲。似乎没有办法在v>3.0中真正实现这一点,我在这个问题上苦苦思索了几个小时。

我现在确实有了一个解决方案:

使用vcl_miss!

下面是一个示例:

代码语言:javascript
复制
sub vcl_recv {
    set req.backend = director_production;
    if (req.request == "POST") {
            return(pipe);
    }
    else {          
            return(lookup);
    }
}

sub vcl_miss {
  if (req.url ~ "/longrunning") {
            set bereq.first_byte_timeout = 1h; # one hour!
            set bereq.between_bytes_timeout = 10m;
  } else {
            set bereq.first_byte_timeout = 10s;
            set bereq.between_bytes_timeout = 1s;
  }
}

这对我很有效。让我担心的是,varnish的文档指出,当在缓存中找不到am对象时,总是会调用vcl_miss。在我的第一个版本中,我省略了vcl_recv中的if/else。然后,我不得不(再次)体验到,不知何故,文档是错误的。需要显式声明"return(lookup)“。否则不调用vcl_miss。:(

票数 3
EN

Stack Overflow用户

发布于 2012-02-08 19:38:52

我会通过在Varnish中声明多个后端来解决它,每个后端都有不同的超时-但可能引用完全相同的IP和服务器。然后,您可以简单地为某些URL设置新的后端,以强制它们使用在那里声明的超时。

代码语言:javascript
复制
if (req.url ~ "[something]") {
     set req.backend = backend_with_higher_timeout;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5110841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档