2

Varnish を使用して、ユーザー固有のテキストとリンクを含むページをキャッシュしようとしています。このようなページをキャッシュする最良の方法は、Edge Side includesを使用することです。

環境

私の Web アプリケーションは RESTful であり、セッションや Cookie さえもサポートしていません。すべてのソース URL は、一意のユーザーを識別できるユーザー固有のクエリ パラメーターが含まれているという意味で完全です。Web アプリケーションで最も多くのアクセスが見られるページは、リスト ページです。ヘッダーにユーザーの電子メールを表示するだけでよく、ページ上のリンクも、ログイン動作をシミュレートするために、ユーザー固有のクエリ パラメータを先に運ぶ必要があります。ページの内容は、ヘッダーとそれらの内部リンクを除いて、各ユーザーにとって同じであると想定されています。

ページのそのような領域に使用しようとし<esi:include />ましたが、明らかに、ページ ソースにユーザー固有のパラメーターを含めることができませんでした (そうしないと、最初のユーザー固有のヒットが最初のユーザーのパラメーターと共にキャッシュされ、後続のすべてのユーザーに同じように提供されます)。さらに、Varnish のサブルーチンでユーザー固有のパラメーターを削除し、a の直前vcl_recvなどのヘッダーに一時的に格納しようとしました。各ソース URL は、ユーザー固有のパラメーターを含まない でハッシュされるため、一意のユーザーごとに重複するキャッシュ オブジェクトは作成されません。req.http.X-Userlookupreq.url

質問

req.http.X-Userこのユーザー固有の値を各 ESI URL に対してクエリ パラメーターとして追加することで、ユーザー固有のパラメーターを読み取り、ユーザー固有の ESI 要求をハッシュしたいと考えています。ソース リクエストとそれに含まれる ESI リクエストの間でクエリ パラメータを共有する方法がわかりません。誰か助けてくれませんか?

次の図に目的を示してみました。 ここに画像の説明を入力

4

1 に答える 1

0

あなたの問題は、ESI 呼び出し自体がキャッシュされることだと思います。URL にクエリ文字列を含める。

詳細は覚えていませんが、Varnish を使用して ESI リクエストを介して Cookie を渡すことができるので、値を Cookie に保存し (暗号化されていますか?)、ESI 呼び出しを処理しているものを介して読み取ることができると思います。

それとも、HTTP ヘッダーを通過させることができますか? その場合、HTTP ヘッダー パラメーターから直接読み取ることができます。

于 2013-10-04T13:40:20.760 に答える