ข้ามไปยังเนื้อหา

ภาพรวม

ส่วนประกอบนี้จำลองโหนดขอบ 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 ที่ขอบ (self-signed หรือ Let’s Encrypt)
  • แคชการตอบสนอง บนดิสก์โดยใช้ proxy_cache_path
  • ส่งต่อ cache miss ไปยัง เซิร์ฟเวอร์ต้นทาง ที่กำหนดค่าได้ (VIP ของตัวกระจายโหลด HTTP ของ F5 XC)
  • รายงานสถานะแคช ผ่านส่วนหัวการตอบสนอง X-Cache-Status (HIT, MISS, BYPASS, EXPIRED)
ฟังก์ชัน CDNการนำไปใช้งานด้วย NGINX
การแคชที่ขอบproxy_cache พร้อมพื้นที่จัดเก็บบนดิสก์
การสร้าง cache keyproxy_cache_key อ้างอิงจากรูปแบบ, โฮสต์ และ URI
การดึงจาก Originproxy_pass ไปยังตัวกระจายโหลด HTTP ของ F5 XC
การยุติ TLSคำสั่ง ssl_certificate ของ NGINX
การเคารพ Cache-Controlproxy_cache_valid พร้อมการส่งผ่านส่วนหัวจาก Origin
การรายงานสถานะแคชadd_header X-Cache-Status $upstream_cache_status
จุดปลายทางสุขภาพตำแหน่ง /health ที่ส่งคืน 200 OK
GET /health

การตอบสนอง (200 OK, Content-Type: application/json):

{
"status": "healthy",
"component": "cdn-edge",
"engine": "nginx",
"vendor_profiles": ["akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door"]
}
GET /<any-path>

ส่วนหัวคำขอที่แทรกไปยัง Origin (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/FingerprintCloudFront-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 ของ Point of Presence ที่จำลอง
X-Served-Bycache-sjc3120-SJCโหนดแคชที่จำลองในรูปแบบ Fastly
X-Request-IDUUID (ต่อคำขอ)ตัวระบุคำขอที่ไม่ซ้ำกัน
  • คำขอแรกไปยังเส้นทางใดๆ: X-Cache-Status: MISS (ดึงจาก Origin แล้วแคชไว้)
  • คำขอที่เหมือนกันในครั้งต่อมา: X-Cache-Status: HIT (ให้บริการจากแคชบนดิสก์)
  • Cache key: $scheme$host$request_uri (รูปแบบ + ชื่อโฮสต์ + เส้นทางเต็ม + query string)
  • อายุแคช: 10 นาที สำหรับ 200/301/302 และ 1 นาที สำหรับ 404
  • การให้บริการเนื้อหาเก่า: ส่งคืนเนื้อหาที่แคชไว้เมื่อ Origin เกิดข้อผิดพลาด (500/502/503/504)
วิธีการเข้าถึงคำสั่ง/เส้นทาง
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

นี่คือชิ้นส่วนหนึ่งของสภาพแวดล้อมแล็บขนาดใหญ่ แต่ละส่วนประกอบเป็นแบบ self-contained และปรับใช้อย่างอิสระ:

  • ส่วนประกอบนี้ ให้บริการขอบ CDN (NGINX บน Azure VM)
  • ส่วนประกอบอื่นๆ ให้บริการแอปพลิเคชัน Origin, การกำหนดค่า F5 XC, DNS, นโยบาย WAF ฯลฯ

ผู้ดำเนินการที่เป็นมนุษย์เพิ่มส่วนประกอบทีละชิ้น เอกสารของแต่ละส่วนประกอบเขียนขึ้นเพื่อให้ผู้ช่วย AI อ่านและปรับใช้โครงสร้างพื้นฐานได้อย่างอิสระ

NGINX ถูกเลือกเป็นเอนจิ้นจำลอง CDN เพราะ:

  1. ผลิตภัณฑ์ F5 — F5 เข้าซื้อกิจการ NGINX Inc. ในปี 2019 และเป็นส่วนหนึ่งของพอร์ตโฟลิโอ F5
  2. พิสูจน์แล้วในอุตสาหกรรม — Cloudflare รัน CDN ทั้งหมดบน NGINX มานานกว่าหนึ่งทศวรรษก่อนจะย้ายไปใช้ Pingora; Netflix ใช้ NGINX สำหรับ CDN Open Connect ของตน
  3. กระบวนการเดียว — จัดการการยุติ TLS และการแคชในไบนารีเดียว ต่างจาก Varnish ที่ต้องใช้พรอกซี TLS แยกต่างหาก
  4. ปรับใช้ได้ง่ายapt install nginx บน Ubuntu 24.04 สองคำสั่งเปิดใช้งานการแคช
  5. มีเอกสารครบถ้วน — เอกสารอย่างเป็นทางการที่ครอบคลุมสำหรับการแคชเนื้อหาและการกำหนดค่า reverse proxy