Kennisbank
1.000 veelgestelde vragen, 500 tutorials en uitlegvideo's. Hier vind je alleen maar oplossingen!
Varnish gebruiken op een Cloudserver
Deze handleiding bevat verschillende voorbeelden van het gebruik van Varnish op de Cloud Server van Infomaniak.
Inleiding
- Raadpleeg deze aanvullende bronnen over de Varnish-configuratietaal (VCL) om de verwerking van verzoeken, het routeren en het cachen onder de knie te krijgen:
Varnish-configuratie
Zodra geïnstalleerd, is de configuratie van Varnish gebaseerd op specifieke regels voor het opslaan in de cache en het legen van de cache. Zorg ervoor dat de toegang wordt beperkt, zodat niet-geautoriseerde partijen uw cache niet kunnen legen.
Hieronder vindt u een voorbeeld van een configuratiebestand met de meest voorkomende gebruiksscenario's:
vcl 4.0;
# Default backend configuration
backend default {
.host = "127.0.0.80"; # Backend IP address
.port = "80"; # Backend port
}
# Access Control List (ACL) for purge authorization
acl purge {
"localhost"; # Local access
"1.2.3.4"; # Trusted home IP
"42.42.42.0"/24; # Trusted company range
! "42.42.42.7"; # Specific IP exclusion (e.g., problematic user)
}
# Handle incoming requests
sub vcl_recv {
# Handle PURGE requests
if (req.method == "PURGE") {
# Check if client IP is authorized
if (!client.ip ~ purge) {
return (synth(405, "IP not authorized for PURGE requests."));
}
return (purge);
}
# Custom PURGEALL for image directory
if (req.method == "PURGEALL" && req.url == "/images") {
if (!client.ip ~ purge) {
return (synth(405, "IP not authorized for PURGEALL requests."));
}
# Invalidate all image-related objects in cache
ban("req.url ~ \.(jpg|png|gif|svg)$");
return (synth(200, "Images purged."));
}
# Bypass cache for authorized requests (e.g., admin panels)
if (req.http.Authorization) {
return (pass);
}
}
# Handle backend responses before caching
sub vcl_backend_response {
# Set TTL for images to 1 day
if (beresp.http.content-type ~ "image") {
set beresp.ttl = 1d;
}
# Respect backend's "uncacheable" instruction
if (beresp.http.uncacheable) {
set beresp.uncacheable = true;
}
}
Purge via de CLI-interface
Zodra uw regels actief zijn, kunt u de purge van uw website (bijv. "domain.xyz") testen met behulp van het hulpprogramma curl:
# Purge the homepage
$ curl -X PURGE {{URL_5}}
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Success 200: Purge completed</h1>
<p>The page has been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 2</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>Om een specifieke URL te legen, wijzigt u eenvoudig het pad van de aanvraag:
# Purge a specific file
$ curl -X PURGE {{URL_6}}
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Success 200: Purge completed</h1>
<p>The file has been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 4</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>Of om de gecombineerde leeging van de afbeeldingen te activeren die in de VCL zijn gedefinieerd:
# Execute PURGEALL for images
$ curl -X PURGEALL {{URL_7}}
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged images</title>
</head>
<body>
<h1>Success 200: Images purged</h1>
<p>All images have been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 32770</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>
Cache legen via een CMS (PHP)
Het cachegeheugen kan ook dynamisch worden beheerd via uw backend. In de vorige configuratie is een controle op de header Uncacheable toegevoegd. Uw CMS kan deze header verzenden om Varnish te dwingen een antwoord niet op te slaan.
Hieronder ziet u hoe u een programmatische purge-aanvraag in PHP kunt verzenden:
<?php
// Initialize cURL for a specific URL
if ($curl = curl_init("{{URL_8}}")) {
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PURGE",
CURLOPT_HTTPHEADER => [
"Host: {$_SERVER['HTTP_HOST']}" // Match the target host
]
]);
curl_exec($curl);
// Check if the purge was successful (HTTP 200)
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) {
echo "Cache purged!";
}
curl_close($curl);
}
?>Link naar deze veelgestelde vragen: https://faq.infomaniak.com/2592
Is deze veelgestelde vragenlijst nuttig geweest?