私はワニスを解決しようとしています。
私の問題です。ワニスを使用してキャッシュしたいメインのリクエスト/レスポンスがあります。HTML 構造内に ESI タグがあります。たくさん持っていきたいです。より長い ttl を持つ 1 つのタグとttl=0s
;を持つ他のタグ (ログインボックス付きのESIコンテンツ)。
とにかく、ワニスがメインのリクエストにヒットするようにしたいのですが、バックエンドの ESI コンテンツにヘッダーなどの情報を求めます。ESI コンテンツが戻ってきたら (最初は親リクエストで、次に ESI によるサブ リクエストであると理解しているため)、何らかのコミュニケーションが必要です。
beresp に加えられた変更は、後で obj に保存されることに注意してください。resp.* 変数は、これから返されるもののコピーです。おそらく obj のコピーです。つまり、 beresp への変更は、将来の obj.* および resp.* 変数に影響します。同様のセマンティクスが req.* と bereq に適用されます。. ベレック。元のリクエストから作成された「バックエンド リクエスト」です。若干異なる場合があります。たとえば、Varnish は HEAD リクエストを GET に変換できます。
https://www.varnish-software.com/static/book/VCL_functions.htmlから
例: ESI サブリクエストのレスポンスにヘッダーがある場合"X-ESI-Cookie"
、それをメイン レスポンスに渡したい。
ESIについて何かを知る唯一の方法はreg.esi_level
.
if (req.esi_level > 0 ) {
set req.http.*;
}
基本的に私が達成したいことは次のとおりです。
ワニスでページ全体をキャッシュしたいのですが、セッション管理のために ESI コンテンツをパイプしますが、セッションを維持するには、サブ (ESI) から親の応答にいくつかのヘッダーを渡す必要があります (ただし、それは明らかだと思います)。
ワニスのリクエスト (親と ESI) は別々に処理されると思います。つまり、通信する機会がありません。Varnish は、タグを ESI 応答からの html に置き換えるだけです。そうですか?
私はそれに対する解決策がないと信じ始めていますが、誰かがこの問題に対するより良い解決策を持っているかもしれません:セッションを維持するには? いくつかの解決策を見つけましたが、私のニーズに合ったものはありません。(私は Fake-Session を信じていました。ID はいくつかの C コードを使用して Varnish によって生成されましたが、ロックはありませんでした)。
現在のsymfony2アプリを採用する方がはるかに簡単なので、そのようにしたいと思います。とにかく、symfony2 がこの種の機能を予期していなかったとは信じられません。私のページは、いくつかのウィジェット (ESI コンテンツ) を除いて、主に静的です。
オブジェクト変数に ESI コンテンツ (リクエスト、コンテンツ、およびレスポンス) があると非常に便利です。
obj.*
ワニス オブジェクトに ESI コンテンツに関する情報がまったくないなんて信じられません。
*.vcl 構成で解決策を探していることに注意することが重要ですが、どの解決策でもうまくいきます。
前もって感謝します。