Varnish を使用して、ユーザー固有のテキストとリンクを含むページをキャッシュしようとしています。このようなページをキャッシュする最良の方法は、Edge Side includesを使用することです。
環境
私の Web アプリケーションは RESTful であり、セッションや Cookie さえもサポートしていません。すべてのソース URL は、一意のユーザーを識別できるユーザー固有のクエリ パラメーターが含まれているという意味で完全です。Web アプリケーションで最も多くのアクセスが見られるページは、リスト ページです。ヘッダーにユーザーの電子メールを表示するだけでよく、ページ上のリンクも、ログイン動作をシミュレートするために、ユーザー固有のクエリ パラメータを先に運ぶ必要があります。ページの内容は、ヘッダーとそれらの内部リンクを除いて、各ユーザーにとって同じであると想定されています。
ページのそのような領域に使用しようとし<esi:include />
ましたが、明らかに、ページ ソースにユーザー固有のパラメーターを含めることができませんでした (そうしないと、最初のユーザー固有のヒットが最初のユーザーのパラメーターと共にキャッシュされ、後続のすべてのユーザーに同じように提供されます)。さらに、Varnish のサブルーチンでユーザー固有のパラメーターを削除し、a の直前vcl_recv
などのヘッダーに一時的に格納しようとしました。各ソース URL は、ユーザー固有のパラメーターを含まない でハッシュされるため、一意のユーザーごとに重複するキャッシュ オブジェクトは作成されません。req.http.X-User
lookup
req.url
質問
req.http.X-User
このユーザー固有の値を各 ESI URL に対してクエリ パラメーターとして追加することで、ユーザー固有のパラメーターを読み取り、ユーザー固有の ESI 要求をハッシュしたいと考えています。ソース リクエストとそれに含まれる ESI リクエストの間でクエリ パラメータを共有する方法がわかりません。誰か助けてくれませんか?
次の図に目的を示してみました。