【问题标题】:Is there a way to force Varnish to read the Cache-Control header on 403 responses?有没有办法强制 Varnish 读取 403 响应的 Cache-Control 标头?
【发布时间】:2016-11-18 17:13:50
【问题描述】:

从代码来看,由于 403 不是白名单状态,Cache-Control 标头被忽略:

switch (http_GetStatus(hp)) {
    default:
        expp->ttl = -1.;

https://github.com/varnishcache/varnish-cache/blob/4.0/bin/varnishd/cache/cache_rfc2616.c#L112-L114

这是我能想到的最好的:

sub vcl_backend_response {
  if (beresp.status == 403) {
    set beresp.http.X-Status = beresp.status;
    set beresp.status = 200;
  }
}

sub vcl_deliver {
    if (resp.http.X-Status) {
      set resp.status = std.integer(resp.http.X-Status, 403);
      unset resp.http.X-Status;
    }
}

虽然这会正确设置和取消设置状态,但每个请求都是缓存 MISS

#2018

【问题讨论】:

    标签: varnish http-status-code-403 cache-control varnish-vcl varnish-4


    【解决方案1】:

    默认情况下,varnish 中不会缓存 403 响应。

    "您可以缓存除上面列出的状态码之外的其他状态码,但您必须在 vcl_backend_response 中将 beresp.ttl 设置为正值。"

    http://book.varnish-software.com/4.0/chapters/VCL_Basics.html#the-initial-value-of-beresp-ttl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      相关资源
      最近更新 更多