2012-04-10 10 views
1

が含まれています。ローカル環境でESIを処理するようにワニスを設定しようとしています。ワニスが処理されていないESIには

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

"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に私はfollowin cを追加しましたファイルの一番下にonfig:(その悪い習慣はちょうど:)動作するようにこの事を取得しようとした場合にはいけないケア)それはすべての要求にESIを処理すべきであるという考えと

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

結果私がロードするときhttp://192.168.56.101:8000/esi/は:

です。 ESIはマークアップに表示され、処理されません。

私はワニスログをチェックしましたが、そこにエラーはなく、ESIには何も関係ありません。

私はここで間違っているのを誰も見ることができますか?ありがとう

+0

ワニス> 3.0を使用していますか?あなたが新しい構文を使用しているからです... – ivy

答えて

1

あなたのesiインクルード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にあなたが/ ESI /リモートサーバへのURLであり、トラフィックをリダイレクトする必要があります。

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

私は今同じことをやっているので、試してみてください。

+2

これまたは他の答えはどのように答えですか? OP(と私)は同じサーバから何かをインクルードしたいのですが、 'sub vcl_fetch'に' set beresp.do_esi = true; 'が含まれていても、ワーニクはバックエンドへのインクルード要求をしなくてもesiタグをレスポンス。これは、Googleで高いが表示されますが、私はこのまたは他の答えが実際に答えであるか見ていない。 – HMR

1

ワニスはESIの小さなサブセットしか実装していませんでした。 2.1の時点で3つのESIステートメント:

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

変数とクッキーに基づくコンテンツの置換は実装されていませんが、ロードマップにあります。 ワニスはHTMLコメント内でESI命令を処理しません。あなたはこのように、VCLでESI処理を有効にする必要があり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   */ 
} 

}

1

ESIの場合は(ワニス3を動作します。

date.php

の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> 

:x)は、 最初の文字は "<" そう簡単にここでHTML構造

を追加私のテストでなければなりません

<?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 
関連する問題