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;
}
外部サイトからいくつかのコンテンツを取得します (静的アセットは提供されないため、ブラウザーでエラーが発生します)
質問 - すべての外部サイトをバックエンドとして定義せずに、外部サイトからコンテンツを取得する方法はありますか?