1

ローカル環境でESIインクルードを処理するようにVarnishをセットアップしようとしています。

仮想マシンでワニスを実行していて、コンテンツはホストマシンで実行されています。

「index.html」と「test.html」の2つのファイルがあります。これらは両方とも、Apacheサーバーのdocrootにある「esi」というフォルダーに保存されます。

index.html

<h1>It Works!</h1>
<esi:include src="test.html" /> 

test.html

<p>ESI HAS BEEN INCLUDED</p>

ワニスはポート8000​​の仮想マシンで実行されています。したがって、ここからアクセスします:http: //192.168.56.101 :8000/esi/

仮想マシンの/etc/varnish/default.vclで、ファイルの最後に次の構成を追加しました。

sub vcl_fetch {
   set beresp.do_esi = true; /* Do ESI processing               */
   set beresp.ttl = 24 h;    /* Sets the TTL on the HTML above  */
}

すべてのリクエストでESIを処理する必要があるという考えで(これを機能させようとするだけで悪い習慣があったとしても気にしないでください:))

http://192.168.56.101:8000/esi/をロードしたときの結果は次のとおりです。

<h1>It Works!</h1>
<esi:include src="test.html" />

すなわち。ESIはマークアップに表示され、処理されていません。

ワニスログを確認しましたが、エラーはなく、ESIに関連するものもありません。

誰かが私がここで間違っていることを見ることができますか?さらに情報が必要な場合はお知らせください。ありがとう

4

4 に答える 4

2

ESI作品(ニス3.x)の場合、最初の文字は「<」でなければならないため、HTML構造を追加するだけです。

ここに私のテスト:

index.php

<html>
<head>
    <title></title>
</head>
<body>
<?php

    $now = new \DateTime('now');
    echo "hello world from index.php ".$now->format('Y-m-d H:i:s');
?>

<br/>

<esi:include src="/date.php"/>

<br/>

<esi:remove>
    ESI NOT AVAILABLE
</esi:remove>

<br/>

<!--esi
ESI AVAILABLE !!

-->
</body>
</html>

date.php

<?php
$now = new \DateTime('now');
echo "hello world from date.php ".$now->format('Y-m-d H:i:s');

出力:

hello world from index.php 2014-08-21 10:45:29
hello world from date.php 2014-08-21 10:46:35
于 2014-08-21T08:49:28.977 に答える
1

esi include srcが「test.html」の場合、ワニスはそのリクエストをデフォルトのバックエンドである127.0.0.1に送信します。リモートサーバー用に2番目のバックエンドを構成する必要があると思います。このようなもの:

backend default {
    .host = "127.0.0.1";
    .port = "8000";
}

backend hostmachine {
    .host = "50.18.104.129"; # Enter your IP address here
    .port = "80";
}

次に、サブvcl_recvで、URLに/esi/が含まれるトラフィックをリモートサーバーにリダイレクトする必要があります。

sub vcl_recv {
      if (req.url ~ "^/esi/") {
            set req.backend = hostmachine;
            set req.http.host = "www.correctdomainname.com";
      } else {
            set req.backend = default;
      }
}

私は今同じことに取り組んでいるので、試してみて、それがあなたのために働くかどうか私に知らせてください。

于 2012-05-21T19:54:56.983 に答える
1

ワニスはESIの小さなサブセットのみを実装しました。2.1の時点で、3つのESIステートメント:

    esi:include
    esi:remove
    <!--esi ...-->

変数とCookieに基づくコンテンツの置換は実装されていませんが、ロードマップ上にあります。Varnishは、HTMLコメントのESI命令を処理しません。ESIを機能させるには、次のようにVCLでESI処理をアクティブ化する必要があります。

sub vcl_fetch {
if (req.url == "/index.html") {
   set beresp.do_esi = true; /* Do ESI processing               */
   set beresp.ttl = 24 h;    /* Sets the TTL on the HTML above  */
} elseif (req.url == "/test.html") {
   set beresp.ttl = 1m;      /* Sets a one minute TTL on        */
                             /*  the included object            */
}

}

于 2014-04-25T19:26:18.630 に答える
0

構成がニスによって読み取られることを確認してください。Dockerコンテナでワニスを実行している場合は、再構築が必要になる場合があります。

設定をばかげたものに変更して、それがキャッチされるかどうかを確認できます。たとえば、バックエンドをw3.orgに変更します。

それでも同じ結果が得られる場合は、構成は使用されません。

于 2019-01-04T10:20:45.797 に答える