ちょっと、そこ! Varnish のサプライヤーとして、私は Varnish VCL で HTTP キャッシュ ヘッダーを設定することが Web サイトのパフォーマンスに大きな変化をもたらす可能性があることをこの目で見てきました。このブログでは、そのプロセスをステップごとに説明します。
まず、HTTP キャッシュ ヘッダーがなぜそれほど重要なのかを理解しましょう。ユーザーが Web サイトにアクセスすると、ブラウザーは HTML、CSS、JavaScript、画像などのリソースをサーバーに要求します。適切なキャッシュがないと、サーバーはこれらのリクエストを毎回処理する必要があるため、特にトラフィックが多い時間帯にサイトの速度が低下する可能性があります。 HTTP キャッシュ ヘッダーは、ブラウザーや他の中間キャッシュ (Varnish など) に、特定のリソースを保存し、サーバーに戻ることなくそれを再利用できる期間を伝えます。


VCLワニスの基礎
Varnish 構成言語 (VCL) は、Varnish の動作を制御するために使用されます。これは、Varnish がリクエストとレスポンスを処理するときに従う一連のルールのようなものです。 VCL には、キャッシュ ヘッダーの設定に重点を置く重要なサブルーチンがいくつかあります。vcl_recv、vcl_backend_response、 そしてvcl_deliver。
vcl_recv
のvcl_recvサブルーチンは、Varnish がクライアント (通常はブラウザ) からリクエストを受信したときに呼び出されます。ここは、リクエストをキャッシュするかどうかを決定するのに最適な場所です。たとえば、頻繁に変更される動的コンテンツに対するリクエストなど、特定の種類のリクエストを除外したい場合があります。
sub vcl_recv { # POST リクエストをキャッシュしない if (req.method == "POST") { return (pass); } # URL パターンに基づいてここにさらに条件を追加できます if (req.url ~ "^/admin/") { return (pass); } }
このコードでは、POST リクエストは通常フォームの送信を伴い、動的である可能性が高いため、POST リクエストをキャッシュしないように Varnish に指示しています。また、次で始まるリクエストも除外されます。/管理者/おそらく、動的なコンテンツを含むサイトの管理領域用のものであると考えられます。
vcl_backend_response
のvcl_backend_responseサブルーチンは、Varnish がバックエンド サーバーから応答を受信したときに呼び出されます。ここでキャッシュヘッダーを設定または変更できます。
sub vcl_backend_response { # すべての応答のデフォルトのキャッシュ時間を設定します set beresp.ttl = 3600s; # コンテンツ タイプに基づいて異なるキャッシュ時間を設定できます if (beresp.http.Content - Type ~ "^text/html") { set beresp.ttl = 1800s; # カスタム キャッシュを追加します - コントロール ヘッダー セット beresp.http.Cache - Control = "public, max - age=3600"; }
ここでは、すべての応答に対してデフォルトの存続期間 (TTL) を 3600 秒 (1 時間) に設定しています。 HTML コンテンツの場合、HTML はより頻繁に変更される可能性があるため、TTL を 1800 秒 (30 分) に短縮します。また、キャッシュ - コントロールヘッダーは、ブラウザーやその他のキャッシュにリソースの処理方法を指示する標準の HTTP ヘッダーです。
vcl_deliver
のvcl_deliverサブルーチンは、Varnish がクライアントに応答を送信する直前に呼び出されます。これを使用して、クライアントに表示されるヘッダーを追加または変更できます。
sub vcl_deliver { # 応答が Varnish によってキャッシュされていることを示すカスタム ヘッダーを追加します set resp.http.X - Cached - By = "Varnish"; }
この例では、カスタム ヘッダーを追加していますX - キャッシュ済み - によって応答が Varnish によってキャッシュされたことをクライアントに知らせます。
高度なキャッシュ シナリオ
キャッシュ ヘッダーを設定するためのより高度なシナリオをいくつか見てみましょう。
キャッシュバスティング
キャッシュ時間内であっても、ブラウザーにリソースの新しいバージョンを強制的に取得させたい場合があります。これを行うには、バージョン番号またはハッシュをリソース URL に追加します。 VCL では、URL をバックエンドに渡す前に URL からバージョン番号を削除することで、これに対処できます。
sub vcl_recv { if (req.url ~ "\?v=[0 - 9]+$") { set req.url = regsub(req.url, "\?v=[0 - 9]+$", ""); } }
このコードは、?v=123URL の一部を取得するため、Varnish はバージョン番号なしで元の URL に基づいてリソースをキャッシュできます。
条件付きキャッシュ
特定の条件が満たされた場合にのみリソースをキャッシュしたい場合があります。たとえば、特定の HTTP ステータス コードがある場合にのみページをキャッシュできます。
sub vcl_backend_response { if (beresp.status == 200) { set beresp.ttl = 3600s; set beresp.http.Cache - Control = "public, max - age=3600"; } else { set beresp.ttl = 0s; set beresp.http.Cache - Control = "no - キャッシュ"; } }
ここでは、成功した応答 (ステータス コード 200) を 1 時間キャッシュしますが、他の応答はキャッシュしません。
当社のワニス製品の使用方法
当社では、HTTP キャッシュ ヘッダーの設定と管理をさらに容易にする、さまざまな Varnish 関連製品を提供しています。たとえば、私たちの水性マットトップコートは、最適化されたキャッシュのメリットを享受しながら、滑らかでマットな仕上がりを求める Web サイトに最適なオプションです。特定のニーズに合わせて簡単にカスタマイズできる、事前構成された VCL テンプレートが付属しています。
私たちの水性ポリウレタン光沢も優れた選択肢です。これは、光沢のある外観を提供し、高度なキャッシュ機能が組み込まれています。これを使用して、要件に応じて、異なるキャッシュ時間でさまざまなタイプのリソースをキャッシュできます。
より汎用的なソリューションをお探しの場合は、水性クリアコートワニス素晴らしいオプションです。 Web サイトのリソースに透明な保護層を提供し、効率的なキャッシュ ヘッダーの設定に役立ちます。
ご購入に関するお問い合わせ
Varnish 製品の詳細について興味がある場合、または Varnish VCL での HTTP キャッシュ ヘッダーの設定についてサポートが必要な場合は、遠慮なくお問い合わせください。当社には、プロセス全体をガイドし、キャッシュ設定を最大限に活用できるようお手伝いできる専門家チームがいます。シンプルな Web サイトを持つ中小企業でも、複雑なキャッシュのニーズがある大企業でも、当社が対応します。
参考文献
- ワニスのドキュメント
- HTTP キャッシュ RFC (RFC 7234)
それで、これで完成です! Varnish VCL で HTTP キャッシュ ヘッダーを設定するのは、最初は少し複雑に思えるかもしれませんが、正しい知識と当社の製品があれば、Web サイトのパフォーマンスを最適化し、ユーザーにより良いエクスペリエンスを提供できます。
