تخطَّ إلى المحتوى

نظرة عامة

يحاكي هذا المكوّن عقدة CDN حافة لبيئات المختبر والعرض التوضيحي. يمثّل الدور الذي يؤديه البائعون أمثال Akamai وCloudflare وAmazon CloudFront وFastly في بنية شبكة العميل — طبقة التخزين المؤقت الأقرب إلى المستخدمين النهائيين والتي تقع أمام خادم المصدر.

في البنى التحتية متعددة البائعين للإنتاج، يقوم العملاء بشكل شائع بإقران شبكة CDN تابعة لجهة خارجية مع F5 Distributed Cloud:

End User → CDN Edge (Akamai/Cloudflare/etc.) → F5 XC HTTP LB → Origin App

يحل هذا المحاكي محل شبكة CDN التجارية بعقدة حافة مستندة إلى NGINX، مما يتيح إجراء العرض التوضيحي والاختبار للتكامل دون الحاجة إلى عقود بائعين أو بنية تحتية إنتاجية.

┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐
│ Client │────▶│ CDN Edge (NGINX) │────▶│ F5 XC HTTP LB │────▶│ Origin App │
│ │ │ Ubuntu 24.04 Azure │ │ (Origin Server) │ │ │
└─────────┘ │ - TLS termination │ └─────────────────┘ └────────────┘
│ - Disk-based cache │
│ - X-Cache-Status │
└──────────────────────┘

عقدة الحافة NGINX:

  • تُنهي TLS عند الحافة (موقّعة ذاتيًا أو Let’s Encrypt)
  • تُخزّن الاستجابات مؤقتًا على القرص باستخدام proxy_cache_path
  • تُحيل طلبات إخفاق التخزين المؤقت إلى خادم مصدر قابل للتهيئة (عنوان VIP لموازن تحميل F5 XC HTTP)
  • تُبلّغ عن حالة التخزين المؤقت عبر رأس الاستجابة X-Cache-Status (HIT أو MISS أو BYPASS أو EXPIRED)
وظيفة CDNتطبيق NGINX
التخزين المؤقت عند الحافةproxy_cache مع تخزين قائم على القرص
توليد مفتاح التخزين المؤقتproxy_cache_key استنادًا إلى المخطط والمضيف وURI
سحب البيانات من المصدرproxy_pass إلى موازن تحميل F5 XC HTTP
إنهاء TLSتوجيه ssl_certificate في NGINX
احترام Cache-Controlproxy_cache_valid مع تمرير رؤوس المصدر
الإبلاغ عن حالة التخزين المؤقتadd_header X-Cache-Status $upstream_cache_status
نقطة نهاية الفحص الصحيموقع /health يُعيد 200 OK

نقاط النهاية وسلوك الطلب/الاستجابة

Section titled “نقاط النهاية وسلوك الطلب/الاستجابة”
GET /health

الاستجابة (200 OK، Content-Type: application/json):

{
"status": "healthy",
"component": "cdn-edge",
"engine": "nginx",
"vendor_profiles": ["akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door"]
}

وكيل CDN (جميع المسارات الأخرى)

Section titled “وكيل CDN (جميع المسارات الأخرى)”
GET /<any-path>

رؤوس الطلبات المُحقنة نحو المصدر (أكثر من 67 رأسًا من 5 بائعين):

الفئةالرؤوس المُضافة
عنوان IP للعميلTrue-Client-IP وCF-Connecting-IP وFastly-Client-IP وX-Azure-ClientIP وCloudFront-Viewer-Address وX-Forwarded-For وX-Real-IP
تحديد الموقع الجغرافيX-Akamai-Edgescape (مركّب) وCF-IPCountry وcf-ipcity وcf-iplatitude/longitude وCloudFront-Viewer-Country/City/Latitude/Longitude وX-Geo-Country-Code/City/Region
اكتشاف الجهازCloudFront-Is-Mobile-Viewer وCloudFront-Is-Desktop-Viewer وCloudFront-Is-Tablet-Viewer وX-Akamai-Device-Characteristics
TLS/البصمة الرقميةCloudFront-Viewer-TLS وcf-ja3-hash وcf-ja4 وCloudFront-Viewer-JA3-Fingerprint
اكتشاف البوتcf-bot-score (85 = يُرجّح أنه إنسان) وcf-verified-bot
تتبع الطلباتCf-Ray وX-Akamai-Request-ID وX-Amz-Cf-Id وX-Azure-Ref
هوية الحافةX-CDN-Edge وX-CDN-POP وX-Served-By وFastly-FF وX-Azure-FDID
قياسيVia وForwarded وCDN-Loop وX-Forwarded-Proto/Host/Port

رؤوس الاستجابة المُضافة إلى كل استجابة وكيل:

الرأسالقيمالغرض
X-Cache-StatusHIT أو MISS أو BYPASS أو EXPIRED أو STALEسلوك التخزين المؤقت لهذا الطلب
X-CDN-Edgecdn-simulatorيُعرّف بعقدة الحافة هذه
X-CDN-POPSJCرمز IATA لنقطة التواجد المحاكاة
X-Served-Bycache-sjc3120-SJCعقدة التخزين المؤقت المحاكاة بتنسيق Fastly
X-Request-IDUUID (لكل طلب)معرّف فريد للطلب
  • الطلب الأول إلى أي مسار: X-Cache-Status: MISS (مُجلب من المصدر، مُخزَّن الآن مؤقتًا)
  • الطلبات المتطابقة اللاحقة: X-Cache-Status: HIT (مُقدَّم من التخزين المؤقت على القرص)
  • مفتاح التخزين المؤقت: $scheme$host$request_uri (المخطط + اسم المضيف + المسار الكامل + سلسلة الاستعلام)
  • مدة صلاحية التخزين المؤقت: 10 دقائق للاستجابات 200/301/302، و1 دقيقة للاستجابات 404
  • تقديم المحتوى القديم: يُعيد المحتوى المُخزَّن مؤقتًا عند حدوث أخطاء المصدر (500/502/503/504)

الوصول إلى الجهاز الافتراضي

Section titled “الوصول إلى الجهاز الافتراضي”
طريقة الوصولالأمر/المسار
SSHssh azureuser@<PUBLIC_IP>
تهيئة NGINX/etc/nginx/conf.d/cdn-edge.conf
سجلات NGINX/var/log/nginx/access.log و/var/log/nginx/error.log
دليل التخزين المؤقت/var/cache/nginx/cdn/
سجل Cloud-init/var/log/cloud-init-output.log

التصميم المعياري للمكونات

Section titled “التصميم المعياري للمكونات”

هذا المكوّن جزء واحد من بيئة مختبر أكبر. كل مكوّن مستقل بذاته ويُنشر بشكل مستقل:

  • هذا المكوّن يوفر حافة CDN (NGINX على Azure VM)
  • مكونات أخرى توفر تطبيق المصدر، وتهيئة F5 XC، وDNS، وسياسات جدار حماية تطبيقات الويب (WAF)، وغيرها.

يُضيف المشغّل البشري المكونات واحدًا تلو الآخر. توثيق كل مكوّن مكتوب بحيث يستطيع مساعد الذكاء الاصطناعي قراءته ونشر البنية التحتية باستقلالية تامة.

تم اختيار NGINX محرّكًا لمحاكاة CDN للأسباب التالية:

  1. منتج F5 — استحوذت F5 على NGINX Inc. عام 2019؛ وهو جزء من محفظة منتجات F5
  2. مُثبَت صناعيًا — اعتمدت Cloudflare شبكة CDN الخاصة بها بالكامل على NGINX لأكثر من عقد قبل الانتقال إلى Pingora؛ تستخدم Netflix كذلك NGINX لشبكة Open Connect CDN الخاصة بها
  3. عملية واحدة — يتولى إنهاء TLS والتخزين المؤقت في ملف ثنائي واحد، على عكس Varnish الذي يتطلب وكيل TLS منفصلًا
  4. نشر بسيطapt install nginx على Ubuntu 24.04، وتوجيهان يُفعّلان التخزين المؤقت
  5. موثّق توثيقًا جيدًا — توثيق رسمي شامل لتخزين المحتوى المؤقت وتهيئة الوكيل العكسي