Как включить контент с другой стороны с ESI в Varnish - PullRequest
0 голосов
/ 13 мая 2018

Я хочу использовать ESI в Varnish для объединения контента с разных сторон. Каждая сторона - это маленький микро сервис с небольшим фрагментом интерфейса. 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;
    }

Я получу некоторый контент с внешнего сайта (статические ресурсы не будут обслуживаться, что приведет к ошибке в браузере)

Вопрос * * 1023 - Есть ли способ получить контент с внешнего сайта, не определяя каждый внешний сайт как бэкэнд?

...