Налаштування Fastly CDN
Fastly — CDN з акцентом на мгновенну інвалідацію кеша (< 150 мс по всій мережі) та програмовану логіку на edge через VCL та Compute@Edge (WASM). Використовується коли потрібен повний контроль над логікою кешування або мгновенне оновлення контенту.
Ключові відмінності
| Можливість | Fastly | Cloudflare | CloudFront |
|---|---|---|---|
| Інвалідація кеша | < 150 мс | 1–30 с | 1–5 хв |
| Програмування edge | VCL + WASM | Workers (JS) | Functions (JS) |
| Тег-інвалідація | Так | Ні | Ні |
| Real-time логи | Так | Так | Через S3 |
Terraform налаштування
resource "fastly_service_vcl" "main" {
name = "example-production"
domain {
name = "example.ru"
}
backend {
address = "origin.example.ru"
name = "origin"
port = 443
use_ssl = true
}
gzip {
name = "gzip-policy"
content_types = ["text/html", "text/css", "application/javascript"]
}
logging_s3 {
name = "s3-logs"
bucket_name = "fastly-logs"
path = "/cdn/%Y/%m/%d/"
}
}
VCL — кастомна логіка кешування
sub vcl_recv {
// Убрати маркетингові параметри з cache key
set req.url = regsubreplace(req.url,
"\?(.*&)?(utm_source|utm_medium|fbclid|gclid)=[^&]*(&|$)",
"?"
);
if (req.http.Cookie ~ "laravel_session") {
return(pass);
}
if (req.url ~ "^/(admin|api)/") {
return(pass);
}
}
sub vcl_backend_response {
if (bereq.url ~ "\.(js|css|woff2)$") {
set beresp.ttl = 365d;
}
if (beresp.http.Content-Type ~ "text/html") {
set beresp.ttl = 5m;
set beresp.grace = 1h;
}
}
Surrogate-Key — тегована інвалідація
// Laravel: додати теги до ответів
public function show(Product $product): Response {
$response = response()->view('products.show', compact('product'));
return $response->header(
'Surrogate-Key',
"product:{$product->id} category:{$product->category_id}"
);
}
// При оновленні товара — інвалідувати тільки пов'язані сторінки
Http::withHeaders(['Fastly-Key' => config('services.fastly.api_key')])
->post("https://api.fastly.com/service/{$serviceId}/purge/product:{$product->id}");
Час налаштування: 2–3 дні для базової конфігурації з VCL та тегованою інвалідацією.







