0

だから私の問題: 私は大きな symfony プロジェクト 2.3、ワニス 5 を持っています。結局のところ、単にtest.phpであっても、ファイルが含まれていない理由を理解したいのです。問題は、コンテンツが含まれていないことですが、タグ esi:include src"..." がわかりません。では、すべての構成を見てみましょう:

シンフォニー: config.yml

esi: 
    enabled: true
fragments:
    path: /_fragments 

some.html.twig:

<h2>Here must be content</h2>

{{ render_esi(url('esi_megamenuBanners')) }}
{{ render_esi(controller("OstrovWebBundle:Frontend/Page:megamenuBanners")) }}
<esi:include src="https://mo.loc/test.php">

<h2>end content</h2>

私がESIを起動しようとしたのは3つの異なる方法です。

ワニス構成:

sub vcl_recv {

#Add a Surrogate-Capability header to announce ESI support.
set req.http.Surrogate-Capability = "abc=ESI/1.0";

}


sub vcl_backend_response {
    if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
        unset beresp.http.Surrogate-Control;
        set beresp.do_esi = true;
    }
}

Surrogate-ControlSurrogate-Capabilityの両方のヘッダーを確認しました- それらは存在します。

ちなみに、nginx:https -> varnish -> nginx:http:8080 -> symfony project を使っています。

私は実験に多くの時間を費やしましたが、決定が見つかりませんでした...私の間違いはどこにあるのか教えてください。

4

1 に答える 1

0

これが答えです。ESI は https では機能しませんurl()の代わりにpath()関数を書くだけで、すべてがうまくいきました!

(https と ESI に関する情報は見つかりませんでした。間違っている可能性があります。注意してください...)

2 つ目は、 Surrogate-Controlが ESI サブリクエストを必要としないことを理解していなかったため、キャッシュ ルールを構成するときに妄想していました。サブリクエストではSurrogate-Control を使用しないでください

私が把握した3番目のことは、render_esi(url("someUrl"))render_esi(controller("someBundle:nameOfController:someAction"))の間で異なります。最初に、ルーティングで前に指定したURLを作成します。2 番目の使用フラグメント。そのため、キャッシュ ルールに役立ちます。

于 2016-12-08T13:37:04.123 に答える