پاک کردن کش CDN و حالت توسعه؛ راهنمای عملی پرج کش
بعد از تغییر سایت هنوز نسخه قدیمی را میبینید؟ یاد بگیرید پرج کش را هدفمند بزنید، محتوای کششده را ببینید و از حالت توسعه درست استفاده کنید.
همه ما این صحنه را دیدهایم: قیمت محصول را در پنل مدیریت عوض میکنید، صفحه را باز میکنید و هنوز عدد قدیمی را میبینید. کش دقیقاً همان کاری را میکند که برایش ساخته شده و نسخه ذخیرهشده را سریع سرو میکند، اما گاهی این نسخه دیگر همان چیزی نیست که میخواهید. راهحل، شناخت سه ابزار است: پاک کردن کش CDN (پرج)، مرور آنچه در کش ذخیره شده، و حالت توسعه برای زمانی که مدام در حال ویرایش هستید.
اگر هنوز با مفهوم کش آشنا نیستید، اول کش سایت چیست و کش CDN چگونه کار میکند را بخوانید. اینجا فرض میکنیم کش روشن است و میخواهیم آن را مدیریت کنیم.
پیش از پرج: چه چیزی اصلاً کش میشود؟
پرج کردن چیزی که کش نشده بیمعناست، پس اول ببینیم nsin چه چیزی را نگه میدارد. طبق مستندات کش:
- فایلهای استاتیک (تصویر، CSS، JS، فونت، رسانه و فایلهای دانلودی) برای هر دامنه بهصورت خودکار و بر اساس پسوند فایل کش میشوند. HTML به این روش کش نمیشود.
- صفحههایی که برای هر کاربر فرق میکنند، مثل صفحه حساب کاربری، کش نمیشوند تا هر کس داده خودش را ببیند.
- nsin از هدر
Cache-Controlسرور شما پیروی میکند، یا بعد از ۵ دقیقه دوباره بررسی میکند. - فایلهای
no-storeوprivate، پاسخهایی که کوکی تنظیم میکنند و دانلودها (مثل PDF و ZIP) برای بازدیدکننده لاگینشده هرگز ذخیره نمیشوند.
کوئریاسترینگ بخشی از کلید کش است؛ یعنی style.css?v=42 و style.css?v=41 دو شیء جدا هستند. به همین دلیل روش رایج ?v= برای شکستن کش همانطور که هست کار میکند.
هر پاسخ یک وضعیت کش دارد
هر پاسخ هدر Nsn-Cache-Status دارد که در آنالیتیکس هم نمایش داده میشود:
| وضعیت | معنی |
|---|---|
| HIT | نسخه موجود بود و بدون درگیر شدن سرور شما سرو شد. |
| MISS | نسخهای نبود؛ از سرور گرفته و ذخیره شد. |
| BYPASS | عمداً رد شد (کوکی، هدر Authorization یا یک قانون کش). |
| DYNAMIC | کششدنی نبود و مستقیم از سرور شما آمد. |
اولین بازدید معمولاً MISS است و بازدیدهای بعدی HIT. اگر میخواهید بدانید کدام قانون روی یک درخواست اعمال شده، همین هدر اولین سرنخ است. لیست هدرها در مستندات هدرهای پروکسی آمده است.
پاک کردن کش CDN: کامل یا هدفمند
پرج یعنی نسخه ذخیرهشده را دور بریزید تا بازدیدکننده بعدی نسخه تازه را بگیرد. طبق راهنمای پرج و مرور کش در بخش Caching دامنهتان میتوانید کل کش را پرج کنید یا فقط یک صفحه یا فایل را. برای پرج هدفمند دو حالت Delete و Refresh هم دارید.
توجه کنید که پرج کش به پلنی نیاز دارد که این قابلیت را شامل شود (پلنها).
پرج همه چیز
- بخش Caching را باز کنید.
- روی Purge everything بزنید.
- تأیید کنید.
برای سایتهای بزرگ چند ثانیه طول میکشد و پنل عملیات را queued نشان میدهد. نکته مهم: بعد از پرج کامل، اولین بازدیدکننده هر صفحه باید منتظر سرور شما بماند. پس اگر فقط یک صفحه عوض شده، سراغ پرج کامل نروید.
پرج یک صفحه یا فایل
در Caching به بخش Cached items بروید، با فیلتر ردیف موردنظر را پیدا کنید و روی Purge بزنید. این دقیقترین روش است و برای تغییرهای کوچک همین کافی است.
حذف یا تازهسازی؟
هنگام پرج هدفمند یکی از دو حالت را انتخاب میکنید:
| حالت | چه اتفاقی میافتد |
|---|---|
| Delete | نسخه حذف میشود، ردیف از لیست میرود و بازدید بعدی نسخه تازه را میگیرد. |
| Refresh | نسخه دور ریخته میشود ولی ردیف در لیست میماند و بازدید بعدی دوباره آن را پر میکند؛ صفحه با محتوای جدید کششده میماند. |
مرور محتوای کششده
فهرست Cached items برای هر شیء اینها را نشان میدهد: host و مسیر، حجم، موقعیت لبه، زمان کش شدن و زمان انقضا. میتوانید بر اساس host، مسیر (مثلاً /assets/*) یا موقعیت لبه فیلتر کنید و بر اساس حجم، تاریخ یا مسیر مرتب کنید. مجموع تعداد و فضای اشغالشده هم به تفکیک موقعیت نمایش داده میشود.
دو کاربرد عملی:
- مرتبسازی بر اساس حجم بزرگترین فایلهای کششده را نشان میدهد.
- فیلتر بر اساس مسیر به شما میگوید مسیری که انتظار دارید کش شود، واقعاً کش شده یا نه.
اگر فایلهای کششده را لازم دارید، اسکریپت nsin-dump-cache.sh آنها را مستقیم از ذخیرهساز کش دانلود میکند و به سرور شما دست نمیزند؛ توضیحش در دانلود فایلهای کششده است. البته این بکآپ سایت نیست: فقط چیزی را میدهد که nsin سرو میکرده و موارد کمبازدید یا کوتاهعمر ممکن است دیگر در کش نباشند.
حالت توسعه: وقتی مدام در حال ویرایش هستید
اگر ساعتها روی قالب یا کد کار میکنید، پرج پشت پرج زدن خستهکننده است. حالت توسعه (Developer mode) کش را در کل دامنه دور میزند و خروجی زنده سرور شما را نشان میدهد؛ حتی خطاها. یعنی اگر سرور خطای 5xx بدهد، همان خطا به مرورگر میرسد، نه صفحه خطای nsin (جزئیات در صفحههای خطای سفارشی).
فعالسازی ساده است: داشبورد دامنه را باز کنید و بالای صفحه Developer mode را روشن کنید. ویژگی مهمش این است که بعد از سه ساعت خودش خاموش میشود، پس اگر فراموشش کنید سایت برای همیشه بدون کش نمیماند.
حالت توسعه برای دوره کار است، نه یک تنظیم دائمی. تا وقتی روشن است همه درخواستها به سرور شما میرسند و همه بازدیدکنندهها، نه فقط شما، خطاهای خود سرور را میبینند. پس وقتی کارتان تمام شد آن را خاموش کنید و اگر لازم بود، یک پرج هدفمند بزنید.
کاهش نیاز به پرج با قانون کش درست
بهترین پرج آن است که لازم نشود. سه عادت کمک میکند:
- نام فایلهای استاتیک را هشدار کنید. فایلی مثل
app.4f3c1.jsبا هر انتشار نام تازه و در نتیجه ورودی تازهای در کش میگیرد و هرگز پرج نمیخواهد. - برای مسیرهای پرتغییر قانون کش بنویسید. طبق مستندات قوانین کش در Rules روی Add Rule و بعد Cache Rule بزنید، آدرسهایی را که قانون روی آنها اعمال میشود مشخص کنید (
/*یا/assets/*) و TTL را کوتاه بگذارید یا Background refresh را روشن کنید. با Background refresh، nsin نسخه را در پسزمینه تازه میکند و بازدیدکننده منتظر نمیماند. - محدوده (Scope) قانون را درست انتخاب کنید. گزینه Static files پیشفرض امن است. گزینه Everything حتی HTML را هم کش میکند و روی صفحههای ورود، سبد خرید یا داشبورد ممکن است صفحه یک نفر را به دیگری نشان بدهد. فقط برای صفحههای یکسان و با روشن بودن بررسیهای ایمنی از آن استفاده کنید.
بررسیهای ایمنی قانون کش بهطور پیشفرض روشناند: کش نکردن درخواستهای دارای هدر Authorization، کش نکردن پاسخهایی که کوکی تنظیم میکنند، رعایت no-store بازدیدکننده، رعایت Cache-Control سرور، استفاده از max-age سرور بهجای TTL قانون، و کش نکردن /wp-admin و /wp-login.php وردپرس. هر کدام را فقط وقتی خاموش کنید که پاسخ برای همه دقیقاً یکسان است.
یک راهنمای سریع برای تصمیم:
| اگر صفحه... | این کار را بکنید |
|---|---|
| برای همه یکسان است (مطلب وبلاگ، تصویر) | کش کنید |
| برای هر نفر فرق میکند (حساب، سبد خرید) | کش نکنید یا بررسیهای ایمنی را روشن نگه دارید |
| مدام تغییر میکند (نتیجه زنده) | TTL کوتاه یا Background refresh |
یک روال پیشنهادی برای انتشار تغییرات
- فایلهای استاتیک هشدار: هیچ کاری لازم نیست.
- تغییر محتوای صفحه یا فایل با آدرس ثابت: پرج هدفمند همان مسیر.
- تغییر گسترده قالب: پرج کامل، ترجیحاً در ساعتی که ترافیک کم است، چون بعد از آن هر صفحه یک بار از سرور شما گرفته میشود.
- روز پرتغییر توسعه: حالت توسعه را روشن کنید و آخر کار خاموش.
اگر میخواهید بعد از انتشار، پرج را از اسکریپت یا CI بزنید، API سی دی ان این کار را ممکن میکند. برای دیدن اثر تنظیمات بر نرخ hit هم میتوانید به بخش Monitoring پنل سر بزنید؛ این بخش ویژگی پرمیوم است و اگر پلن دامنه آن را شامل نشود، پیام ارتقا میبینید (مستندات مانیتورینگ).
پرسشهای متداول
پرج کردم ولی هنوز صفحه قدیمی را میبینم. چرا؟
مرورگر شما هم کش دارد. صفحه را در یک پنجره خصوصی باز کنید یا با ریلود سخت (hard reload) بارگذاری کنید. همچنین هدر Nsn-Cache-Status را بررسی کنید تا ببینید پاسخ واقعاً از کجا آمده است.
بعد از هر دیپلوی باید پرج کنم؟
فقط اگر محتوای فایلی با همان آدرس قبلی عوض شده باشد. فایلهایی با نام نسخهدار (مثل app.4f3c1.js) نیازی به پرج ندارند، چون نام جدید یعنی ورودی جدید.
حالت توسعه تا کی روشن میماند؟
سه ساعت. بعد از آن خودکار خاموش میشود و کش دوباره فعال میشود. اگر کارتان زودتر تمام شد میتوانید دستی هم خاموشش کنید.
فرق Delete و Refresh در پرج چیست؟
Delete نسخه و ردیف آن را حذف میکند و بازدید بعدی از سرور میگیرد. Refresh نسخه را دور میریزد ولی ردیف را در فهرست نگه میدارد و بازدید بعدی دوباره آن را پر میکند.
چرا صفحه خصوصی یک کاربر به کاربر دیگر نشان داده شد؟
معمولاً یک قانون با محدوده Everything و خاموش بودن بررسی کوکی است. آن مسیر را از قانون مستثنی کنید و یک بار پرج بزنید. نمونه کامل این خطر در مقاله کش CDN توضیح داده شده است.
شروع کنید
برای امتحان این ابزارها به تنظیم خاصی نیاز ندارید: دامنهتان را روی CDN nsin بیاورید، بخش Caching را باز کنید و اولین پرج هدفمند را روی یک صفحه بزنید. برای ساخت حساب و افزودن دامنه به پنل nsin بروید.
