13

私の人生では、ワニスに500の内部サーバーエラーのキャッシュを無視させる方法がわかりません。基本的に、誰かが varnish をヒットし、500 内部サーバー エラーが返された場合、varnish がそのページをキャッシュしないようにします (0 の ttl/猶予期間を設定しますか?)。私はワニス 3.0.3 を使用しています。これが私の VCL です。デフォルトでは、ページを 30 日間キャッシュします。

sub vcl_fetch {
    # Set 30-day TTL
    set beresp.ttl = 2592000 s;
    set beresp.grace = 15d; /* The max amount of time to keep object in cache */

    if (beresp.status == 301 || beresp.status == 302) {
            return (hit_for_pass);
    }

    # Serve pages from the cache should we get a sudden error and re-check in one minute
    if (beresp.status >= 500) {
      set beresp.grace = 1s;
      set beresp.ttl = 1s;
      return (hit_for_pass);
    }

    # Unset the "etag" header (suggested)
    unset beresp.http.etag;

    return(deliver);
}

つまり、英語では、500 内部サーバーが返された場合... X-CACHE は MISS を表示するはずです。ページを更新すると、まだ 500 内部サーバーである場合、再び MISS が表示されます。ページが正常に配信されると、HIT が表示されます。

4

1 に答える 1

16

デフォルトでは、Varnish は次のステータス コードのみをキャッシュします[1]:

  • 200: わかりました
  • 203: 正式でない情報
  • 300: 複数の選択肢
  • 301: 恒久的に移動
  • 302: 一時的に移動しました
  • 307: 一時的なリダイレクト
  • 410: 消えた
  • 404お探しのページが見つかりませんでした

ページが初めて正常に配信された場合でも、MISS が発生することに注意してください。

[1] http://book.varnish-software.com/3.0/VCL_Basics.html#the-initial-value-of-beresp-ttl

于 2013-06-14T15:35:22.337 に答える