我正在尝试使用 Varnish 4.x 中的 ESI 从我的 (PHP) 后端获取数据。我想将结果保存(缓存)在我的 Varnish 实例中。结果对于每个 IP 地址 (client.ip) 都是唯一的,因此缓存结果的哈希必须包含 client.ip。Varnish 没有按预期缓存。我似乎无法基于 IP 进行缓存。为了让您了解我尝试过的内容,请参见下文。
独特的.js:
var rand = '<esi:include src="/unique.php"/>';
独特的.php:
<?php echo rand(); ?>
default.vcl(提取):
sub vcl_recv {
if (req.url ~ "^/unique.(js|php)") {
set req.http.marker = client.ip;
}
}
sub vcl_hash {
if (req.http.marker) {
hash_data(req.http.marker);
}
}
sub vcl_backend_response {
if (bereq.url == "/unique.js") {
set beresp.do_esi = true;
set beresp.ttl = 24h;
} elseif (bereq.url == "/unique.php") {
set beresp.ttl = 30d;
}
}
显然我错过了一些东西。任何提示表示赞赏!