הגדרת Fastly CDN: VCL, Caching, Tagged Invalidation

כאשר האתר שלך מאט עקב גידול בתעבורה ועדכוני תוכן דורשים ניקוי מטמון ממושך, רשתות CDN סטנדרטיות אינן מספיקות. אנו מגדירים את Fastly CDN עם לוגיקת VCL הניתנת לתכנות וביטול תיוג, ומעניקים לך שליטה מלאה על המטמון. הצוות שלנו מספק פרויקט סוהר—מביקורת ועד תמיכה—המבטיח ביצועים אמינים ורענון נתונים מיידי.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת Fastly CDN: VCL, Caching, Tagged Invalidation
מורכב
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

הגדרת Fastly CDN לפרויקטים בעלי עומס גבוה

כשהאתר שלכם מתחיל להאט עקב עליות תנועה ואי-התוקף של מטמון לוקח דקות, רשתות CDN סטנדרטיות לא עומדות במשימה. אנו רואים לעתים קרובות פרויקטים שבהם התוכן מתעדכן כל כמה שניות אך המטמון חי שעה—מה שגורם לנתונים מיושנים. Fastly פותרת זאת עם אי-התוקף מיידי (<150 אלפיות השנייה ברחבי הרשת שלה) ולוגיקת קצה הניתנת לתכנות באמצעות VCL ו-Compute@Edge. זו הבחירה לפרויקטים שזקוקים לשליטה מלאה במטמון ולגמישות.

אנו משתמשים ב-Fastly לתוכן דינמי: פורטלי חדשות, מסחר אלקטרוני, פלטפורמות SaaS. לאחר ההתקנה, יחס ה-HIT מגיע ל-95%, ומפחית את העומס על השרת האחורי ב-80%. להלן נפרט את התכונות המרכזיות ודוגמאות תצורה מעשיות.

מדוע Fastly עולה על רשתות CDN אחרות?

תכונה Fastly Cloudflare CloudFront
אי-תוקף <150 אלפיות השנייה 1–30 שניות 1–5 דקות
תכנות קצה VCL + WASM Workers (JS) Functions (JS)
אי-תוקף לפי תגיות כן (Surrogate-Key) לא לא
לוגים בזמן אמת כן כן דרך S3
סטרימינג מצוין טוב טוב

Fastly מבטלת תוקף פי 10 מהר יותר מ-CloudFront ופי 20 מהר יותר מ-Cloudflare. וSurrogate-Key לאי-תוקף לפי תגיות מאפשר לכם לנקות רק את הדפים הרלוונטיים מבלי להשפיע על כל האתר.

כיצד אנו מתקינים Fastly CDN: שלבים

ההתקנה מתבצעת בשלבים:

  1. ניתוח — בדיקת הארכיטקטורה הנוכחית, התנועה ודרישות המטמון.
  2. עיצוב — פיתוח לוגיקת VCL: אילו כתובות URL לשמור במטמון, אילו להעביר, כיצד לטפל בעוגיות.
  3. יישום — פריסת השירות באמצעות Terraform או API, כתיבת כללי VCL, הגדרת Surrogate-Key בשרת האחורי.
  4. בדיקות — אימות אי-תוקף, ביצועים, תקינות המטמון.
  5. פריסה — הפעלת CDN בסביבת הייצור, ניטור ואופטימיזציה.
שלב משך תוצאה
ניתוח 1–2 ימים דיאגרמת ארכיטקטורה, דרישות
עיצוב יום אחד לוגיקת VCL, תוכנית אי-תוקף
יישום 1–2 ימים שירות פעיל ב-Fastly
בדיקות יום אחד דוח ביצועים
פריסה חצי יום CDN מופעל בסביבת הייצור

כיצד פועל אי-תוקף לפי תגיות (Surrogate-Key)

זהו היתרון המרכזי של Fastly. ניתן להקצות תגית אחת או יותר (מפתחות) לכל דף או אובייקט. כשהתוכן מתעדכן, שלחו בקשת אי-תוקף רק עבור התגיות הללו—המטמון נמחק מיידית ללא Purge All.

דוגמה ב-Laravel:

// Laravel: добавить Surrogate-Key заголовок в ответ
public function show(Product $product): Response
{
    $response = response()->view('products.show', compact('product'));

    // Теги для этой страницы
    $surrogateKeys = [
        "product:{$product->id}",
        "category:{$product->category_id}",
        "brand:{$product->brand_id}",
    ];

    return $response->header(
        'Surrogate-Key',
        implode(' ', $surrogateKeys)
    );
}

// При обновлении товара — инвалидировать только связанные страницы
class ProductObserver
{
    public function saved(Product $product): void
    {
        Http::withHeaders([
            'Fastly-Key' => config('services.fastly.api_key'),
        ])->post(
            "https://api.fastly.com/service/{$serviceId}/purge/product:{$product->id}"
        );
    }
}
פרטי יישוםשימו לב שמפתח ה-API של Fastly חייב להישמר בצורה מאובטחת. אנו ממליצים להשתמש ב-Laravel Vault או במשתני סביבה.

VCL — לוגיקת מטמון מותאמת אישית

Fastly מריצה VCL על כל בקשה. היא חזקה יותר מ-Workers לפעולות רשת. הנה סט כללים אופייני שבו אנו משתמשים:

// Custom VCL: vcl_recv — обработка входящего запроса
sub vcl_recv {
    // Убрать маркетинговые параметры из cache key
    set req.url = regsubreplace(req.url, "\?(.*&)?(utm_source|utm_medium|utm_campaign|fbclid|gclid)=[^&]*(&|$)", "?" );
    set req.url = regsub(req.url, "\?$", "");

    // Не кешировать авторизованных пользователей
    if (req.http.Cookie ~ "laravel_session") {
        return(pass);
    }

    // Не кешировать /admin/ и /api/
    if (req.url ~ "^/(admin|area51|api)/") {
        return(pass);
    }

    // Нормализация Accept-Encoding
    if (req.http.Accept-Encoding ~ "br") {
        set req.http.Accept-Encoding = "br";
    } elsif (req.http.Accept-Encoding ~ "gzip") {
        set req.http.Accept-Encoding = "gzip";
    } else {
        unset req.http.Accept-Encoding;
    }
}

sub vcl_backend_response {
    // Статические ассеты — год
    if (bereq.url ~ "\.(js|css|woff2|webp|avif)$") {
        set beresp.ttl = 365d;
        set beresp.http.Cache-Control = "public, max-age=31536000, immutable";
    }

    // HTML-страницы — 5 минут
    if (beresp.http.Content-Type ~ "text/html") {
        set beresp.ttl = 5m;
        set beresp.grace = 1h; // stale-while-revalidate
    }
}

sub vcl_deliver {
    // Отладочный заголовок
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.X-Cache-Hits = obj.hits;
    } else {
        set resp.http.X-Cache = "MISS";
    }
}
הסבר על VCLשימו לב: ב-vcl_recv אנו מנרמלים את Accept-Encoding כדי למנוע כפילות מטמון עבור קידודים שונים. זה מעלה את יחס ה-HIT ל-95%.

פריסה באמצעות Terraform

Fastly מנוהלת במלואה דרך API או ספק Terraform. להלן דוגמת תצורה עם backend, gzip ולוגינג:

terraform {
  required_providers {
    fastly = {
      source = "fastly/fastly"
      version = "~> 5.0"
    }
  }
}

resource "fastly_service_vcl" "main" {
  name = "example-production"

  domain {
    name = "example.ru"
  }

  backend {
    address = "origin.example.ru"
    name = "origin"
    port = 443
    use_ssl = true
    ssl_cert_hostname = "origin.example.ru"
    ssl_sni_hostname = "origin.example.ru"
    connect_timeout = 5000
    between_bytes_timeout = 30000
    first_byte_timeout = 30000
  }

  gzip {
    name = "gzip-policy"
    content_types = ["text/html", "text/css", "application/javascript", "application/json"]
    extensions = ["css", "js", "html", "json"]
  }

  logging_s3 {
    name = "s3-logs"
    bucket_name = "fastly-logs"
    path = "/cdn/%Y/%m/%d/"
    period = 3600
    format = "%h %l %u %t \"%r\" %>s %b"
    s3_access_key = var.aws_access_key
    s3_secret_key = var.aws_secret_key
  }

  logging_elasticsearch {
    name = "elasticsearch-logs"
    index = "fastly-%{now}V"
    url = "https://es.example.ru:9200"
    pipeline = "fastly-pipeline"
    format = jsonencode({
      timestamp = "%{now}V"
      request_url = "%{req.url}V"
      status = "%{resp.status}V"
      cache_status = "%{resp.http.X-Cache}V"
      country = "%{client.geo.country_code}V"
      duration_ms = "%D"
    })
  }

  force_destroy = true
}

פרסום תוכן מיידי

בעת פרסום מאמר או מוצר, פשוט קראו ל-API כדי לבטל תוקף רק של הדפים המושפעים:

class ArticlePublishedListener
{
    public function handle(ArticlePublished $event): void
    {
        $article = $event->article;

        Http::withHeaders(['Fastly-Key' => config('services.fastly.api_key')])
            ->post("https://api.fastly.com/service/{$serviceId}/purge", [
                'urls' => [
                    "https://example.ru/blog/{$article->slug}",
                    "https://example.ru/blog/",
                    "https://example.ru/",
                ],
            ]);
    }
}

מה כלול בהגדרת Fastly CDN

  • בדיקת ארכיטקטורה ותנועה נוכחית
  • פיתוח לוגיקת מטמון VCL המותאמת לפרויקט שלכם
  • הגדרת אי-תוקף לפי תגיות Surrogate-Key
  • אינטגרציה עם השרת האחורי (Laravel, Next.js, Django וכו')
  • הגדרת ניטור ולוגים (S3, Elasticsearch, Kafka)
  • תיעוד והדרכת צוות
  • תמיכה לאחר השחרור למשך שבועיים

לאחר ההתקנה, זמן אי-התוקף הוא מתחת ל-150 אלפיות השנייה, יחס ה-HIT עולה על 95%, והעומס על השרת האחורי יורד ב-80%. בפרויקט אחד, עלויות ה-CDN החודשיות ירדו מ-$4,500 ל-$1,200, ומהירות טעינת הדף השתפרה ב-40%. כפי שצוין בתיעוד של Fastly, אי-התוקף של המטמון מתרחש תוך פחות מ-150 אלפיות השנייה.

לוחות זמנים ועלות

התקנה בסיסית עם VCL ואי-תוקף לפי תגיות אורכת 2–3 ימים. לפרויקטים מורכבים עם כללים מותאמים אישית, עד 5 ימים. העלות נקבעת בנפרד לאחר בדיקה. קבלו ייעוץ על הגדרת Fastly CDN — צרו קשר.

טעויות נפוצות בהתקנת Fastly

  • חוסר נרמול Accept-Encoding: גרסאות שונות של כתובות URL נכנסות למטמון, מה שמפחית את יחס ה-HIT.
  • ללא טיפול בעוגיות: דפים עם סשנים נשמרים במטמון, מה שגורם לסכסוכי נתונים.
  • TTL ארוך מדי ל-HTML ללא תקופת חסד: כשל בשרת המקור גורם לשגיאות למשתמשים.
  • אי שימוש ב-Surrogate-Key: אי-התוקף מתרחש בכל האתר במקום ממוקד.

למהנדסים שלנו יש ניסיון של 5+ שנים עם Fastly והסמכות VCL. אנו מבטיחים שאחרי ההתקנה, האתר שלכם יהיה מהיר ועמיד. הזמינו בדיקה של ארכיטקטורת ה-CDN הנוכחית שלכם — ונציע את הפתרון האופטימלי.