הגדרת AWS CloudFront CDN במפתח אפס
כשמשיקים אתר ב-AWS, משתמשים גלובליים נתקלים לעיתים קרובות בטעינה איטית. TTFB מעל 500 אלפיות השנייה, קפיצות ב-LCP, והשרת לא יכול לעמוד בעומס שיא. בלי CDN, זה נורמלי. אנו מגדירים את AWS CloudFront כך שזמני התגובה יורדים פי 2–3 והעומס על המקור יורד ב-90%. הניסיון שלנו: 5+ שנים בעבודה עם AWS, 50+ פרויקטים, מהנדסים מוסמכים. אנו מבטיחים SLA ותמיכה מסביב לשעון.
איך CloudFront מאיץ את האתר שלך
CloudFront הוא ה-CDN של אמזון עם 450+ נקודות קצה ברחבי העולם. במקום לפגוע תמיד בשרת שלך, הוא מספק תוכן שמור מהצומת הקרוב ביותר. זה מפחית באופן קיצוני את ה-TTFB (50 אלפיות השנייה הראשונות) ומשפר את Core Web Vitals: LCP, CLS, INP. בנוסף, CloudFront תומך ב-HTTP/2, דחיסת Brotli/Gzip אוטומטית, ו-stale-while-revalidate. חיסכון בתעבורה יכול להגיע ל-60% בזכות דחיסה וקשח בקצה.
מדיניות קשח טיפוסית לסוגי תוכן שונים:
| סוג תוכן | מזהה מדיניות קשח | TTL מינימלי/מקסימלי | התנהגות שגיאה |
|---|---|---|---|
| נכסים סטטיים (CSS, JS, תמונות) | Managed-CachingOptimized |
שנה | stale-while-revalidate |
| דפי HTML | מותאם אישית | 5–10 דקות | stale-while-revalidate |
| בקשות API | Managed-CachingDisabled |
0 | אין לקשח |
למה לבחור ב-CloudFront לתשתית AWS?
CloudFront משתלב עמוק עם AWS—S3, ALB, API Gateway, Lambda@Edge. אתה יכול:
- לצרף אישור SSL דרך ACM בחינם.
- להשתמש ב-Origin Shield לשכבת קשח נוספת בין הקצה למקור.
- להריץ לוגיקה מותאמת אישית על Edge Functions (CloudFront Functions או Lambda@Edge) ללא חביון.
השוואה עם CDNs אחרים:
| תכונה | CloudFront | Cloudflare | Fastly |
|---|---|---|---|
| נקודות קצה | 450+ | 330+ | 50+ |
| אינטגרציית AWS | טבעית | צד שלישי | צד שלישי |
| Lambda@Edge | כן | לא | לא |
| Origin Shield | כן | לא | כן (בתשלום בלבד) |
CloudFront הוא הבחירה הטובה ביותר אם התשתית שלך כבר על AWS. זה נותן לך שליטה מלאה על קשח ואבטחה.
בעיות אמיתיות ש-CloudFront פותר
בפרויקט אחד עם 100,000 מבקרים ייחודיים ביום, הפחתנו את ה-TTFB מ-800 אלפיות השנייה ל-40 אלפיות השנייה לאחר הגדרת CloudFront עם Origin Shield ומדיניות קשח נכונה. העומס על המקור ירד פי 50 ועלויות התעבורה ירדו ב-40%. Origin Shield הוא שכבת קשח שנייה בין הקצה למקור שמאגדת בקשות ומפחיתה עומס. מומלץ לפרויקטים עם אלפי בקשות בשנייה.
תהליך ההגדרה שלנו
- ניתוח: אנו לומדים את ארכיטקטורת האתר שלך, קובעים אילו משאבים לקשח ואילו APIs לעקוף.
- עיצוב: אנו מתכננים את ההפצה, מדיניות הקשח, ההתנהגויות ו-Origin Shield.
- יישום: אנו כותבים תצורות Terraform, מגדירים SSL דרך ACM, ומחברים S3 לתוכן סטטי.
- בדיקות: אנו מוודאים כותרות קשח, invalidation, ומהירות טעינה באזורים שונים.
- פריסה: אנו פורסים דרך CI/CD ומתעדים את התהליך.
מה כלול בעבודה
- תיעוד של התצורה והוראות למפתחים.
- גישה ל-CloudFront, ACM, S3 עם הרשאות מינימליות.
- הדרכה לצוות שלך: איך לנהל קשח וליצור invalidations.
- חודש אחד של תמיכה לאחר ההשקה—תיקון כל בעיה בלתי צפויה.
- ניטור דרך CloudWatch עם התראות על שגיאות וחביון.
- דוח ביצועים עם מדדים (TTFB, LCP, CLS) לפני ואחרי היישום.
דוגמה לתצורת Terraform
# main.tf — создание CloudFront distribution
resource "aws_cloudfront_distribution" "main" {
enabled = true
is_ipv6_enabled = true
default_root_object = "index.html"
price_class = "PriceClass_200"
# Основной origin — Laravel на EC2/ALB
origin {
domain_name = aws_lb.main.dns_name
origin_id = "alb-origin"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
origin_ssl_protocols = ["TLSv1.2"]
}
custom_header {
name = "X-Origin-Verify"
value = var.origin_verify_token
}
}
# S3 origin для статических файлов
origin {
domain_name = aws_s3_bucket.assets.bucket_regional_domain_name
origin_id = "s3-assets"
origin_access_control_id = aws_cloudfront_origin_access_control.main.id
origin_shield {
enabled = true
origin_shield_region = "eu-central-1"
}
}
# Статические ассеты с S3
ordered_cache_behavior {
path_pattern = "/assets/*"
target_origin_id = "s3-assets"
viewer_protocol_policy = "redirect-to-https"
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
compress = true
cache_policy_id = aws_cloudfront_cache_policy.assets.id
}
# API — без кеша
ordered_cache_behavior {
path_pattern = "/api/*"
target_origin_id = "alb-origin"
viewer_protocol_policy = "https-only"
allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
cache_policy_id = data.aws_cloudfront_cache_policy.caching_disabled.id
origin_request_policy_id = data.aws_cloudfront_origin_request_policy.all_viewer.id
}
# Основные страницы — короткий кеш
default_cache_behavior {
target_origin_id = "alb-origin"
viewer_protocol_policy = "redirect-to-https"
allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
compress = true
cache_policy_id = aws_cloudfront_cache_policy.pages.id
}
restrictions {
geo_restriction {
restriction_type = "none"
}
}
viewer_certificate {
acm_certificate_arn = aws_acm_certificate.main.arn
ssl_support_method = "sni-only"
minimum_protocol_version = "TLSv1.2_2021"
}
}
# Cache Policy для статических ассетов
resource "aws_cloudfront_cache_policy" "assets" {
name = "assets-immutable"
min_ttl = 31536000
max_ttl = 31536000
default_ttl = 31536000
parameters_in_cache_key_and_forwarded_to_origin {
cookies_config {
cookie_behavior = "none"
}
headers_config {
header_behavior = "none"
}
query_strings_config {
query_string_behavior = "none"
}
enable_accept_encoding_brotli = true
enable_accept_encoding_gzip = true
}
} Cache Invalidation במהלך פריסה
# AWS CLI: инвалидировать всё
aws cloudfront create-invalidation \
--distribution-id $DISTRIBUTION_ID \
--paths "/*"
# Только HTML-страницы (после публикации контента)
aws cloudfront create-invalidation \
--distribution-id $DISTRIBUTION_ID \
--paths "/blog/*" "/products/*" "/" // Laravel: инвалидация при публикации статьи
use Aws\CloudFront\CloudFrontClient;
class ArticlePublished
{
public function handle(Article $article): void
{
$client = new CloudFrontClient([
'version' => 'latest',
'region' => 'us-east-1',
]);
$client->createInvalidation([
'DistributionId' => config('services.cloudfront.distribution_id'),
'InvalidationBatch' => [
'Paths' => ['Quantity' => 1, 'Items' => ["/blog/{$article->slug}"]],
'CallerReference' => (string) now()->timestamp,
],
]);
}
} CloudFront Functions — אבטחת קצה
// function.js — добавляет security headers (< 1 мс)
function handler(event) {
var response = event.response;
var headers = response.headers;
headers['strict-transport-security'] = { value: 'max-age=63072000; includeSubDomains; preload' };
headers['x-content-type-options'] = { value: 'nosniff' };
headers['x-frame-options'] = { value: 'SAMEORIGIN' };
headers['referrer-policy'] = { value: 'strict-origin-when-cross-origin' };
return response;
} resource "aws_cloudfront_function" "security_headers" {
name = "security-headers"
runtime = "cloudfront-js-2.0"
code = file("function.js")
publish = true
} Origin Shield
קשח ביניים נוסף בין צמתי הקצה לשרת המקור. מפחית את העומס על המקור פי 10–50 עבור תוכן פופולרי. מופעל בדוגמה למעלה.
מידע נוסף על תצורת Origin Shield
Origin Shield מוגדר בתוך בלוק המקור. בחר אזור הקרוב ביותר למקור שלך. לאירופה—eu-central-1, לארה"ב—us-east-1. זה מפחית חביון והופך את הקשח ליעיל יותר.לוחות זמנים ועלות
הגדרה בסיסית אורכת 1–2 ימים. תרחישים מורכבים עם Lambda@Edge ו-Origin Shield עד 5 ימים. אנו מחשבים את העלות המדויקת לאחר ניתוח התשתית שלך. נעריך את הפרויקט שלך ביום אחד—צור קשר כדי לקבל הצעה. קבל ייעוץ על הגדרת CloudFront היום.
למידע נוסף: תיעוד CloudFront, CDN







