Как написать лаковый скрипт, чтобы сделать что-то особенное - PullRequest
0 голосов
/ 06 января 2012

Сценарии Varnish кажутся достаточно надежными для vcl, но я пока не могу понять, как заставить его делать то, что мне нужно. Я запускаю различные сайты из одной и той же кодовой базы и хочу, чтобы для большинства каталогов был установлен унифицированный кэш лаков, поэтому

x.mysite.org / theme / something.gif и y.mysite.org/theme/something.gif не должны хранить две копии одного и того же gif-файла в кэше лака

Тем не менее

x.mysite.org / file.php / 1 и y.mysite.org/file.php/1 должны иметь отдельные кэши на основе URL.

Также mysite.org - это совершенно другой сайт, который имеет свой собственный кеш.

Мое текущее направление выглядит следующим образом

sub vcl_fetch {
  if (req.url ~ ".*\.org/file\.php") {
    # do normal site specific caching
  } elseif (req.url ~ "^+?\.mysite.org") {
    # cache all found material in a base directory so everyone knows where to look
    set req.url = regsub(req.url, "(.*\.org)(.*)", "base.mysite.org\2");
  } else {
    # do normal site specific caching for base site
  }
}

sub vcl_recv {
  # do I need to do something here to look in base.mysite.org
}

Я могу сделать base.mysite.org реальным сайтом, обслуживаемым Apache, если необходимо, чтобы запросы могли проваливаться, если кеша нет.

Я на пути записи, любая помощь.

Ответы [ 2 ]

1 голос
/ 07 января 2012

Вы должны нормализовать req.http.host вместо req.url, поэтому

sub vcl_fetch {
  # if it starts with /theme or /static, or contains .gif,.png etc, 
  #   then consider the host to the normalized/common host
  if (req.url ~ "^/(theme|static)" || req.url ~ "\.(gif|png)" ) {
    set req.http.host = "base.mysite.org";
    return (lookup);
  }
  # else, do non shared stuff here
}
0 голосов
/ 05 февраля 2012

По умолчанию Varnish будет использовать имя хоста + URL, чтобы получить хэш объекта кэша.Это означает, что даже если x.mysite.org/theme/something.gif и y.mysite.org/theme/something.gif указывают на одно и то же содержимое, Varnish увидит их как два разных объекта кэша.Единственный способ заставить их указывать на один и тот же объект кэша - нормализовать имя хоста, как объяснила Айви в своем посте.

'Надеюсь, это поможет.

...