問題タブ [esi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
varnish - Varnish のキャッシュされたオブジェクト内で ESI タグを使用する
ここのガイドに従っています:https://www.varnish-cache.org/docs/trunk/tutorial/esi.html
現在、私のプロジェクトには 2 つのページがあります。
http://127.0.0.1:3001/
(キャッシュ制御: 最大年齢 = 60、非公開):<b>Cached:</b> <%= Time.now %> <br/>
<b>ESI:</b> <esi:include src="/staticview" /> <br/>
http://127.0.0.1:3001/staticview
(Cache-Control:max-age=1、非公開):<%= Time.now %>
ただし、最初のページをリクエストするたびに、毎秒更新するのではなく、ESI インクルードの結果を 60 秒間キャッシュしているようです。
最初のリクエスト:
2 番目の要求 (10 秒後):
3 番目のリクエスト (約 1 分後):
これは予想される動作ですか?または、ドキュメントを誤解していますか?
私の VCL 設定は次のようになります。
Varnish は次のパラメーターで実行されます。
私のVarnishバージョンはこれです(Mac OS Xで実行され、HomebrewリポジトリのVarnishを使用):
varnish - Varnish ESIインクルードは、親ページがバックエンドからフェッチされた場合にのみ機能します
Varnish 3.0.2、Apache2、Pressflowを実行しています。ESIを初めて起動して機能させようとしていますが、機能しますが、親ページが初めて要求されたときのみです。その後、親ページと置き換えられたコンテンツをキャッシュからプルします。私が考えることができる唯一のことは、インクルードされたファイルをまったくキャッシュしないように指示しているにもかかわらず、インクルードされたコンテンツが永続的にキャッシュされているということです。これが、保存されているインクルードされたファイルのオブジェクトです...
私はこれに丸一日を費やし、検索し、見つけたすべての記事を読み、VCLとHTTPヘッダーの両方で構成の調整のヒープ全体を試しました。間違っていることが何も見えません。
これは私のVCLからのスニペットであり、キャッシュに保存しないように強制しようとしています
varnishlogにエラーを示すものは何も表示されていないことを付け加えておきます。include srcでパスとホスト+パスだけを使用してみましたが、違いはありません。バックエンドに新鮮なコンテンツを要求することはありません。2回目以降のリクエストのログを見ると、それがESIページであることに気付かないでしょう。
javascript - 最も安全なjavascriptJSONインラインテクニック
私はvarnish+esiを使用して、RESTFulAPIから外部のjsonコンテンツを返しています。この手法により、リクエストごとにWebサーバーのリソースを使用せずに、リクエストを管理してデータを更新できます。
例えば:
インクルード後、esiワニスは次のように戻ります。
これは正常に機能しますが、APIがエラーを返す場合、この手法は解析エラーを生成します。
隠しdivを使用してこの問題を解決し、エラーを解析してキャッチしました。
スクリプトタイプtext/esiも使用してみましたが、ブラウザはスクリプトタグ(wtf)内にhtmlをレンダリングします。例:
質問:
タグをラップして、ブラウザがタグを解析しないようにする理由はありますか?
symfony - ESIコンポーネントのキャッシュされたページにログオンすると、/ _ internal / secure/.../none.htmlにリダイレクトされます
ワニスをセットアップしたばかりで、本番環境に切り替える前にポート8080でいくつかのテストを実行しました。
キャッシュされたページを表示している場合は、次のことに気づきました。
そして、(外部サービスを使用せずに、通常のログインで)ログインしようとします。ESI
それは、スタイルがなく、URLのある頭がないページに私をリダイレクトすることになります...:8080/_internal/secure/MyBundleHomeBundle:Home:login/none.html
Step1スクリーンショット/ Step2スクリーンショット
ホームページに戻ると、ログインしています。
どうすればそれを回避できますか?
編集 :
akamai - esi:include または esi:eval ステートメントの結果を esi 変数に格納できますか?
ESI include または eval ブロックの結果を ESI 変数に格納したいと考えています。インクルードの内容は私の管理外です。その形式は JSON です。以下のすべてを試してみましたが、役に立ちませんでした。変数は空の文字列になります。
私がテストしている ESI サーバーは Akamai の ETS です。
php - Varnish ESIスクリプトは(元のページ)にあったページを取得できますか?
VarnishでキャッシュするPHPページがあります:http://categories.php?name=NAME。次のようなESIスクリプトがあります:<esi:include src = "/ esi.php" />
すべてのページに同様のヘッダー、フッター、サイドバーがあるため、VCLハッシュを実行するときにname = NAMEを削除して、すべてのページが同じキャッシュを取得できるようにします。
問題は、esi.phpスクリプト内で、どのページがESIリクエストを発行したかを知りたいということです。それはcategories.php?name = Aまたはcategories.php?name = Bでしたか?
これどうやってするの?この情報はどこにも見つかりませんでした。
HTTP REFERERの中にあるのではないかと思っていましたが、そうではありません。:(
php - ワニス ESI: 奇妙な文字
Varnish ESI (エッジ サイド インクルード) に問題があります。ESI を使用する部分に、下の画像のような奇妙な文字が表示されることがあります。
どうすればこれを修正できますか? おもしろいのは、この問題が発生する場合と発生しない場合があることです。
drupal - Varnish を使用した ESI Fragment で 503 Service Unavailable が表示されるのはなぜですか?
ローカルに Varnish をセットアップし、ページの特定の領域に ESI フラグメントを実装しました。しかし、default.vcl で ESI をオンにするとすぐに、ワニスはキャッシュを停止し、さらにフラグメントが追加されたページの特定のセクションでは、代わりに 503 サービスを利用できないという通知が表示されます。
ワニスがキャッシュを停止するように見える行は、次のelseステートメントです。
ここに私の default.vcl があります: http://pastebin.com/MEQF4Gbk
今、RxHeaders で多くの「ESI_xmlerror c No ESI processing, first char not '<'」を取得します。
RxHeaders の 1 つのサンプル (JS ファイル用) http://pastebin.com/tX7zpBN1
esiフラグメントがある場合にのみワニスにキャッシュするように指示する方法を理解していないと思いますか?誰かが私が間違っていることを説明できますか?
php - ESIはブロッキングですか、それともノンブロッキングですか?
キャッシング戦略を計画しており、 ESIを掘り下げて、それが自分のニーズに合っているかどうかを確認しています。
今日、これらの質問が生じました:
- 各インクルードはシリアルまたはパラレルで実行されますか?私がこれらのうちの5つを持っているとしましょう:
{% render '...' with {}, {'standalone': true} %}
。結果のページはそれらすべてを待たなければならないことを理解していますが、それにかかる時間は、最も遅いインクルードに似ているのでしょうか、それともそれらすべてのインクルードの合計に似ているのでしょうか? - 答えが「シリアル」の場合、それをパラレルに変換する方法はありますか?
- Webサイトのユーザー固有の部分にAjaxを使用する方がよいでしょうか?どちらの場合、どちらを選びますか?