皆さんこんにちは。Varnish で Edge Side Includes を使用して静的 HTML シェルをキャッシュし、動的 HTML と JSON オブジェクトを含めています。
HTML の ESI は正しく含まれていますが、JSON オブジェクトの ESI は含まれていません。デバッグ ステートメントは、Varnish がそれを認識することを確立しますが、JSON ESI を含めないことを不可解に決定します。
ローディング構造は次のとおりです。
page uncached. blank page with headers to set a cookie and esi 1
esi 1 cached. A bunch of static HTML, plus esi 2 and esi 3
esi 2 uncached. A JSON object which is different on every page load.
esi 3 uncached. Some HTML which updates with every page load.
繰り返しますが、esi 1とesi 3は問題なく動作しますが、esi 2は含まれていません。esi 2のコンテンツは次のとおりです。
{session_page_history_id:24231}
XML のように見えない ESI コードがエラーを引き起こすことを読んだので、ランタイム パラメーターesi_syntax=0x7を設定しました。さいころはありませんが、少なくともデバッグ データを取得しています。
esi 2の壊れた呼び出しは次のようになります。
<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/>
そして、esi 3の (動作中の) 呼び出しは次のようになります。
<esi:include src="http://www.domain.com/dynamic_esi/get_service_magic_html?&for_esi=1"/>
前述したように、Varnish は ESI をインクルードしようとしていることを認識しているように見えますが、varnishlog から得られる唯一の関連するデバッグ メッセージは次のとおりです。
25 Debug c AddBit: 6997 <<![CDATA[
window.esi__values =
<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/>
;
//]]>
</script>
<link rel="stylesheet" href="http://www.
クライアントに表示される出力には、すべての通常のコンテンツが含まれていますが、 <esi> タグはそのまま残されています。これは、上記のデバッグ メッセージに表示されているものとまったく同じように見えます。
esi 2 が解析/インクルードされない理由を知っている人はいますか? どんな助けでも大歓迎です!