
2日前からこれに取り組んでいますが、うまくいきません。
つまり、基本的には、特定の受信リクエスト URL の Varnish キャッシュをバイパスしたいのです。
私は次のようなルールを定義しました:
sub vcl_recv {
if (req.url ~ "/en/reading-books/") { return(pass); }
}
しかし、ページを更新すると、まだキャッシュされており、応答ヘッダーは以下を返します。
via: 1.1 varnish-v4
x-varnish: 2
このバックグラウンド実行コマンドは出力を生成します:
varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'
ここで何が欠けているのでしょうか? 何かご指摘いただければ幸いです。
答え1
サポートされているバージョンにアップグレードする
受信URLのキャッシュのデバッグについて話す前に、次の点を指摘しておきたい。既知のセキュリティ上の脆弱性がある Varnish のサポート終了バージョンを実行している。
最新バージョンにアップグレードするか、Varnish Cache 6.0 LTS を使用してください。
見るhttps://www.varnish-software.com/developers/tutorials/#installationsさまざまな Linux ディストリビューションのインストール ガイドの一覧。
正確なURLまたはURLパターンの一致
共有した VCL コードは、 のキャッシュをバイパスします/en/reading-books
。その URL の完全一致を試みていますか、それとも URL のセットに一致するパターンを試みていますか?
完全一致にするには、URL を次のように調整します。
sub vcl_recv {
if (req.url == "/en/reading-books/") {
return(pass);
}
}
すべて で始まる複数の URL を一致させる場合は/en/reading-books/
、VCL を次のように調整します。
sub vcl_recv {
if (req.url == "^/en/reading-books/.*$") {
return(pass);
}
}
Varnish固有のレスポンスヘッダーについて
質問の中で次のヘッダーについて言及しました:
via: 1.1 varnish-v4
x-varnish: 2
これらは Varnish を使用していることを示しますが、必ずしも Varnish がキャッシュからの応答を提供するというわけではありません。
ヘッダーvia
は、Varnish が応答チェーン内のプロキシ サーバーであるという事実をユーザーに通知するだけです。
ヘッダーの値はx-varnish
通常、リクエストを処理したトランザクションの ID を参照します。
Age
実際には、応答がキャッシュから提供されている期間を示すヘッダーです。
ログを確認する
このvarnishncsa
コマンドは Varnish 共有メモリ ログにアクセスできますが、実際には多くの有用なキャッシュ情報を表示しません。
の目的はvarnishncsa
、Apache や Nginx が返すものと同様のアクセス ログ情報を返すことです。
キャッシュをデバッグするには、次のコマンドを実行してください。
varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"
varnishncsa
NCSA 形式の 1 行の応答を生成しますが、varnishlog
完全なトランザクションを返します。 からの出力をvarnishlog
質問に追加していただければ、デバッグをお手伝いします。