آموزش CDN و سرعت سایت

پاک کردن کش CDN (Purge)؛ چه زمانی، به چه روشی و با چه احتیاطی

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۷ دقیقه

browseredgeoriginHITCDNPurgeآموزش CDN و سرعت سایتپاک کردن کش CDN(Purge)؛ چه زمانی، بهچه روشی و با چه احتیاطیمجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

Purge نسخه‌های ذخیره‌شده در لبه‌های CDN را حذف می‌کند تا درخواست بعدی نسخهٔ تازه را از سرور اصلی بگیرد. همیشه دقیق‌ترین روش ممکن را انتخاب کنید: پاک کردن یک یا چند آدرس مشخص، سپس پیشوند یا تگ، و فقط در شرایط اضطراری کل کش. پاک کردن کل کش در ساعت شلوغ می‌تواند بار ناگهانی روی سرور اصلی بیندازد. برای فایل‌های استاتیک، نام نسخه‌دار نیاز به Purge را تقریباً از بین می‌برد.

Purge چیست؟

CDN نسخه‌ای از فایل‌ها و صفحه‌های سایت را در سرورهای لبه، که در نقاط مختلف قرار دارند، ذخیره می‌کند تا کاربران آن‌ها را از نزدیک‌ترین نقطه دریافت کنند. این نسخه‌ها تا پایان مدتی که هدر Cache-Control یا قانون CDN تعیین کرده، معتبر می‌مانند. اگر در این فاصله فایل را روی سرور اصلی تغییر دهید، کاربران همچنان نسخهٔ قدیمی را می‌بینند.

Purge یعنی به CDN بگویید نسخه‌های ذخیره‌شدهٔ یک یا چند آدرس را دور بیندازد. درخواست بعدی برای آن آدرس، به‌جای دریافت از کش، به سرور اصلی می‌رود، نسخهٔ تازه را می‌گیرد و دوباره در لبه ذخیره می‌کند. اگر با سازوکار کش آشنا نیستید، مقالهٔ کش چیست را ببینید.

چرخهٔ Purge
فرمان Purgeاولین بازدیدذخیره در لبهتغییر در سرور اصلیمحتوای جدید آماده استPurge در CDNحذف نسخهٔ قدیمی از لبه‌هادرخواست بعدیMISS و دریافت از مبدأکش دوباره پر شددرخواست‌های بعدی HITفرمان Purgeاولین بازدیدذخیره در لبهتغییر در سرور اصلیمحتوای جدید آماده استPurge در CDNحذف نسخهٔ قدیمی از لبه‌هادرخواست بعدیMISS و دریافت از مبدأکش دوباره پر شددرخواست‌های بعدی HIT
شکل ۱ پس از Purge، اولین درخواست هر آدرس به سرور اصلی می‌رود و نسخهٔ تازه دوباره کش می‌شود.

چه زمانی Purge لازم است؟

  • تغییر فوری محتوا: قیمت یا موجودی یک محصول عوض شده، اطلاعیه‌ای باید فوراً دیده شود یا اشتباهی در صفحه باید اصلاح شود.
  • انتشار نسخهٔ جدید سایت وقتی فایل‌های CSS و JS نام ثابت دارند.
  • حذف محتوای حساس: فایلی که اشتباهی منتشر شده باید فوراً از همهٔ لبه‌ها حذف شود؛ پس از حذف از سرور اصلی، حتماً کش را هم پاک کنید.
  • رفع یک خطای کش‌شده: گاهی یک صفحهٔ خطا، مثلاً یک 404 یا 5xx موقت، کش می‌شود و پس از رفع مشکل باید پاک شود.
  • تغییر قانون‌های کش: پس از اصلاح هدرها یا قوانین کش، نسخه‌های قبلی با قاعدهٔ قدیم ذخیره شده‌اند.

روش‌های Purge

بیشتر CDNها چند سطح Purge دارند. قاعدهٔ کلی: همیشه دقیق‌ترین روشی را انتخاب کنید که کار را انجام می‌دهد.

پاک کردن آدرس مشخص. یک یا چند آدرس کامل را وارد می‌کنید و فقط همان‌ها پاک می‌شوند. دقیق‌ترین و کم‌خطرترین روش است. به نسخه‌های مختلف یک آدرس دقت کنید: آدرس با و بدون www، با و بدون اسلش انتهایی و با رشتهٔ کوئری‌های مختلف ممکن است در کش جدا باشند.

پاک کردن بر اساس پیشوند یا پوشه. همهٔ آدرس‌هایی که با یک مسیر شروع می‌شوند، مثلاً /blog/ یا /assets/img/. برای وقتی که یک بخش کامل سایت تغییر کرده است.

پاک کردن بر اساس تگ. برخی CDNها اجازه می‌دهند سرور اصلی در پاسخ هر صفحه یک هدر با تگ‌هایی مثل product-123 بفرستد. وقتی آن محصول تغییر کرد، فقط با یک دستور همهٔ صفحه‌هایی که آن تگ را دارند پاک می‌شوند؛ صفحهٔ محصول، صفحهٔ دسته و نتایج جست‌وجو. این قدرتمندترین روش برای سایت‌های پویاست، اما به پشتیبانی CDN و تغییر در برنامه نیاز دارد.

پاک کردن کل کش. همهٔ محتوای ذخیره‌شدهٔ دامنه پاک می‌شود. ساده است اما پرهزینه‌ترین گزینه است.

از دقیق‌ترین تا پرخطرترین
  1. آدرس مشخص

    فقط صفحه یا فایل تغییرکرده؛ کم‌خطرترین گزینه.

  2. تگ

    همهٔ صفحه‌های مرتبط با یک محصول یا نوشته؛ نیازمند پشتیبانی CDN.

  3. پیشوند یا پوشه

    یک بخش کامل سایت مثل /blog/.

  4. کل کش

    فقط در شرایط اضطراری و ساعت کم‌ترافیک؛ بار ناگهانی روی سرور اصلی.

شکل ۲ همیشه از بالای این فهرست شروع کنید و فقط در صورت نیاز پایین بیایید.

چرا پاک کردن کل کش خطرناک است؟

وقتی کل کش پاک می‌شود، لحظه‌ای پس از آن تقریباً همهٔ درخواست‌ها MISS می‌شوند و مستقیم به سرور اصلی می‌روند. سروری که در حالت عادی فقط بخش کوچکی از ترافیک را پاسخ می‌داد، ناگهان باید بخش بزرگ آن را تحمل کند. اگر سرور برای این بار آماده نباشد، کند می‌شود، workerهایش پر می‌شوند و CDN به کاربران خطای 5xx نشان می‌دهد. بدتر اینکه صفحه‌های خطا گاهی خودشان کش می‌شوند. این سناریو و راه تشخیصش در مقالهٔ خطاهای 5xx در CDN آمده است.

اگر مجبور به پاک کردن کل کش هستید:

  • در ساعت کم‌ترافیک انجام دهید.
  • پیش از آن مطمئن شوید سرور اصلی منابع آزاد کافی دارد؛ وضعیت را با ابزارهای بررسی مصرف CPU و رم ببینید.
  • پس از آن، صفحه‌های مهم را خودتان یک بار باز کنید تا دوباره در کش قرار بگیرند.
  • چند دقیقه لاگ خطای سرور و داشبورد CDN را زیر نظر بگیرید.

Purge از طریق API

برای اینکه پاک کردن کش بخشی از روند انتشار شود و فراموش نشود، بیشتر CDNها API دارند. یک نمونهٔ کلی با curl:

curl -X POST "https://api.cdn-provider.example/zones/ZONE_ID/purge" \
  -H "Authorization: Bearer $CDN_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"files":["https://example.com/","https://example.com/pricing"]}'

آدرس دقیق API و قالب داده در هر CDN متفاوت است و باید از مستندات همان سرویس برداشته شود. توکن API را با کمترین دسترسی لازم، یعنی فقط مجوز Purge برای همان دامنه، بسازید و در متغیر محیطی یا مدیر اسرار نگه دارید؛ هرگز در کد یا مخزن گیت قرار ندهید.

با این API می‌توانید Purge را در اسکریپت انتشار قرار دهید تا پس از هر استقرار، فقط صفحه‌های تغییرکرده پاک شوند. سیستم‌های مدیریت محتوا هم معمولاً افزونه‌ای دارند که با ویرایش هر نوشته، آدرس‌های مربوط را خودکار Purge می‌کند.

جایگزین بهتر: نیاز به Purge را کم کنید

بهترین Purge، Purgeی است که لازم نباشد. دو راهبرد اصلی:

نام فایل نسخه‌دار برای فایل‌های استاتیک. وقتی ابزار ساخت، اثر انگشت محتوا را در نام فایل قرار می‌دهد، مثل app.3f9a2c.css، هر تغییر یک فایل با نام جدید تولید می‌کند. صفحهٔ HTML به نام جدید اشاره می‌کند و فایل قدیمی دیگر درخواست نمی‌شود. این فایل‌ها را می‌توانید برای مدت بسیار طولانی کش کنید و هرگز Purge نکنید.

مدت کش کوتاه برای HTML. صفحه‌های HTML را با مدت کوتاهی در CDN کش کنید. این‌طور حتی بدون Purge، تغییرات پس از مدت کوتاهی خودشان به کاربران می‌رسند و Purge فقط برای تغییرات فوری لازم است. چگونگی تنظیم این مدت‌ها در راهنمای Cache-Control و قوانین کش آمده است.

Purge یا نام نسخه‌دار؟
Purge دستی یا API
  • برای HTML و محتوای پویا
  • تغییر فوری در همهٔ لبه‌ها
  • نیازمند یادآوری یا اتوماسیون
  • پاک کردن گسترده بار سرور را بالا می‌برد
در برابر
نام فایل نسخه‌دار
  • برای CSS، JS و فایل‌های ساخت
  • هرگز به Purge نیاز ندارد
  • کش بسیار طولانی و امن
  • خودکار توسط ابزار ساخت
شکل ۳ فایل‌های استاتیک را نسخه‌دار کنید تا Purge فقط برای HTML لازم باشد.

بررسی نتیجهٔ Purge

پس از Purge، مطمئن شوید نسخهٔ جدید تحویل داده می‌شود. هدر وضعیت کش در اولین درخواست پس از Purge باید MISS یا معادل آن باشد و در درخواست‌های بعدی HIT:

curl -sI https://example.com/pricing | grep -iE "cache|age|last-modified"

اگر پس از Purge همچنان محتوای قدیمی می‌بینید، به این موارد شک کنید:

  • کش مرورگر: CDN پاک شده اما مرورگر شما نسخهٔ خودش را دارد. با پنجرهٔ خصوصی یا curl تست کنید.
  • آدرس متفاوت: نسخهٔ با www یا با رشتهٔ کوئری را پاک نکرده‌اید.
  • کش دیگری در مسیر: کش برنامه، کش افزونهٔ CMS یا کش Nginx روی سرور اصلی هنوز نسخهٔ قدیمی را تحویل می‌دهد و CDN همان را دوباره ذخیره می‌کند. ابتدا کش‌های سمت سرور را پاک کنید، بعد CDN را.
  • زمان انتشار: در برخی CDNها Purge چند ثانیه طول می‌کشد تا به همهٔ لبه‌ها برسد.

با ترکیب نام فایل نسخه‌دار، مدت کش مناسب و Purge دقیق، CDN هم سرعت بالا می‌دهد و هم محتوای همیشه به‌روز.

سؤالات متداول

آیا Purge باعث کندی سایت می‌شود؟

پاک کردن یک یا چند آدرس اثر محسوسی ندارد؛ فقط اولین درخواست بعدی کمی کندتر است. پاک کردن کل کش اما می‌تواند تا زمانی که کش دوباره پر شود، بار سرور اصلی را بالا ببرد و سایت را کند کند.

چرا پس از Purge هنوز نسخهٔ قدیمی را می‌بینم؟

رایج‌ترین علت کش مرورگر خودتان است. با پنجرهٔ خصوصی یا curl تست کنید. اگر مشکل ماند، آدرس‌های با www یا رشتهٔ کوئری و کش‌های سمت سرور مثل افزونهٔ CMS را بررسی کنید.

آیا هر بار انتشار سایت باید کل کش را پاک کنم؟

خیر. با نام فایل نسخه‌دار برای CSS و JS و مدت کش کوتاه برای HTML، معمولاً نیازی به Purge کامل نیست. در صورت نیاز فقط آدرس‌های تغییرکرده را پاک کنید.

Purge بر اساس تگ چیست؟

سرور اصلی در پاسخ هر صفحه هدری با برچسب‌هایی مثل شناسهٔ محصول می‌فرستد و CDN آن را به خاطر می‌سپارد. با Purge یک تگ، همهٔ صفحه‌های مرتبط با آن یک‌جا پاک می‌شوند؛ قابلیتی که فقط برخی CDNها ارائه می‌کنند.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.