0

ワニスのスクリプトはvclにとってかなり堅牢に見えますが、必要なことを実行する方法がまだわかりません。同じコードベースからさまざまなサイトを実行していて、ほとんどのディレクトリに統一されたワニスキャッシュが必要なので

x.mysite.org/theme/something.gifとy.mysite.org/theme/something.gifは、同じgifの2つのコピーをニスキャッシュに保存しないでください。

でも

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で提供されるサイトにして、キャッシュがない場合にリクエストが失敗するようにすることができます。

私は書き込みパスにいますか、助けてください。

4

2 に答える 2

1

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
}
于 2012-01-06T20:43:27.080 に答える
0

デフォルトでは、Varnishはホスト名とURLを使用してキャッシュオブジェクトのハッシュを取得します。これは、x.mysite.org / theme /something.gifとy.mysite.org/theme/something.gifがまったく同じコンテンツを指している場合でも、Varnishはそれらを2つの異なるキャッシュオブジェクトと見なすことを意味します。それらを同じキャッシュオブジェクトを指すようにする唯一の方法は、Ivyが彼の投稿で説明したようにホスト名を正規化することです。

'お役に立てば幸いです。

于 2012-02-04T21:10:32.040 に答える