2

Varnish で ESI を使用して、さまざまな側面のコンテンツを組み合わせたいと考えています。各サイドは、小さなフロントエンド スニペットを持つ小さなマイクロ サービスです。ESI は、さまざまなスニペットを使用してページを構築する必要があります。

Varnish 4.0.5 を使用します。私の側のコンテンツに使用する限り、問題なく動作します。

<html>
<body>
    <esi:include src="/hello"/>                 <!-- works -->
    <esi:include src="http://www.example.org/index.html"/>   <!-- doesn't works -->
</body>
</html>

これが私のvclです

vcl 4.0;
backend default {
    .host = "localhost";
    .port = "8080";
}

sub vcl_recv {

    # Only a single backend
    set req.backend_hint= default;

    # Setting http headers for backend
    set req.http.X-Forwarded-For = client.ip;

    # Unset headers that might cause us to cache duplicate infos
    unset req.http.Accept-Language;
    unset req.http.User-Agent;


    # drop cookies and params from static assets
    if (req.url ~ "\.(gif|jpg|jpeg|swf|ttf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
      unset req.http.cookie;
      set req.url = regsub(req.url, "\?.*$", "");
    }

    # drop tracking params
    if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
      set req.url = regsub(req.url, "\?.*$", "");
   }
}
sub vcl_backend_response { 
  set beresp.do_esi = true;  
}    

ブラウザで次の結果が得られます

hello
Cannot GET /index.html

VCLでも外部ホストを定義すると

backend otherbackend {
    .host = "www.example.org";
    .port = "80";
}

sub vcl_recv {
    # Only a single backend
    set req.backend_hint= default;

    if (req.http.host == "www.example.org") {
      set req.backend_hint = otherbackend;
    }

外部サイトからいくつかのコンテンツを取得します (静的アセットは提供されないため、ブラウザーでエラーが発生します)

質問 - すべての外部サイトをバックエンドとして定義せずに、外部サイトからコンテンツを取得する方法はありますか?

4

0 に答える 0