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

标签 varnish

我在 PHP 机器前安装了 Varnish。对于 98% 的页面,单个请求超时(VLC 中的 req.connect_timeout)有效。然而,我有几页,我们预计最多需要 3 分钟才能超时。有没有办法在 Varnish 中为特定请求设置 req.connection_timeout?如果是这样,请告诉我 VCL 中的灯。我想为所有页面保留相同的 req.connect_timeout,但为这几个特定页面提高该数字。

最佳答案

不幸的是,这不适用于 varnish > 3

很伤心。在 v>3.0 中似乎没有办法真正实现这一点 在这个问题上几个小时以来一直在敲我的头。

我现在有一个解决方案:

使用 vcl_miss!

这是一个例子:

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 的文档指出,当在缓存中找不到对象时,总是调用 vcl_miss。在我的第一个版本中,我省略了 vcl_recv 中的 if/else。然后我不得不(再一次)体验文档以某种方式是错误的。需要明确声明“return(lookup)”。否则不调用 vcl_miss。 :(

关于varnish - 有没有办法在 Varnish 中为特定请求设置 req.connection_timeout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110841/

相关文章:

caching - Varnish 和 ESI : Fetching in parallel and possible workarounds

django - Varnish 是否与 Django Csrf 保护兼容?

apache - 如何将 REMOTE_ADDR 设置为 HTTP_X_REAL_IP?

php - cookie 如何影响 Varnish 缓存?

varnish - 如何查看 Varnish 的 hash_data() 的内容?

php - Docker, Varnish ,对等连接重置

caching - hash_data vcl_hash 的作用是什么?

c - 避免内联 c 中无效的初始化程序

configuration - beresp.grace 和 obj.grace 有什么区别

php - 使用 Varnish 时如何记录网站的页面浏览量