vcl 4.0;
import kvstore;
import http;
sub vcl_init {
kvstore.init(0, 25000);
}
sub vcl_recv {
# This block will only be taken once per url
if (kvstore.counter(0, req.url, 1, 1s) == 1) {
http.init(0);
http.req_copy_headers(0);
http.req_set_header(0, "X-prefetch", "true");
http.req_set_method(0, "HEAD");
http.req_set_url(0, http.prefetch_next_url();
http.req_send_and_finish(0);
}
}
Prefetch mit vmod-http
Hier verwenden wir eine Kombination aus vmod_kvstore (Schlüssel-Wert-Speicher) und vmod_http (externe Anfragen).
Durch die gemeinsame Verwendung beider vmods können wir Inhalte in einem Live-Streaming-Szenario vorab laden und die vom vmod_http im Hintergrund ausgelösten Abrufe beschleunigen.
Wir verwenden eine „Zähler“-Funktion, um sicherzustellen, dass eine einzige URL pro Sekunde eine Anforderung für das Prefetch auslösen kann. Auf diese Weise verhindern wir eine Überlastung unseres Backends. Ohne diesen Zähler würden wir 10.000 Anforderungen für das Prefetch an das Backend senden.