رفتن به محتوا

دانلود فایل‌های کش‌شده

فهرست آیتم‌های کش‌شده به شما نشان می‌دهد nsin چه چیزی را ذخیره کرده است. گاهی خودِ فایل‌ها را می‌خواهید — برای بازیابی تصاویر پس از خرابی سرور، برای دیدن آنچه واقعاً به بازدیدکننده‌ها سرویس می‌شود، یا برای گرفتن یک نسخه‌ی پشتیبان پیش از یک تغییر بزرگ.

nsin-dump-cache.sh همین کار را از ترمینال انجام می‌دهد. یک یا چند دامنه به آن بدهید تا هر آیتم کش‌شده را در پوشه‌ای جدا برای هر دامنه بنویسد؛ مسیرها و نام فایل‌ها همان‌طور که هستند حفظ می‌شوند.

فایل‌ها از حافظه‌ی کش nsin خوانده می‌شوند، نه از سایت شما. هیچ درخواستی به سرور شما زده نمی‌شود، پس پایین‌بودن سرور — که معمولاً دلیل اصلی نیاز به نسخه‌های کش‌شده است — هیچ تأثیری روی نتیجه ندارد.

nsin-dump-cache.sh

Terminal window
curl -o nsin-dump-cache.sh https://nsin.ir/docs/nsin-dump-cache.sh
chmod +x nsin-dump-cache.sh

فقط به python3 نیاز دارد که روی macOS و همه‌ی لینوکس‌های رایج از پیش نصب است. چیزی برای نصب کردن نیست.

از panel.nsin.ir → Settings → API Keys یک کلید بسازید و آن را export کنید:

Terminal window
export NSIN_API_KEY="nsin_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

کلید فقط‌خواندنی کافی است — این اسکریپت فقط می‌خواند. بیشتر در کلیدهای API.

Terminal window
# یک دامنه (حداقل یک دامنه لازم است)
./nsin-dump-cache.sh example.com
# چند دامنه با هم — هرکدام پوشه‌ی خودش را می‌گیرد
./nsin-dump-cache.sh example.com shop.example.com example.ir
# لوکیشن دیگر، فقط تصاویر، در پوشه‌ی دلخواه، ۱۲ دانلود هم‌زمان
./nsin-dump-cache.sh example.com --node TH --images --out ~/backup -j 12

هنگام اجرا برای هر دامنه یک نوار پیشرفت زنده می‌بینید — تعداد انجام‌شده، حجم دانلودشده، سرعت لحظه‌ای و زمان باقی‌مانده — و فایل‌های تمام‌شده بالای آن فهرست می‌شوند.

▶ example.com
registry: 1284 cached entries at node IR
1190 unique URLs, 1190 objects to fetch
✓ example.com/assets/hero.webp 184.2 KB
✓ example.com/assets/app.4f2c.js 92.7 KB
⊙ example.com/old/banner.png no longer cached
████████████████▍ example.com
58% 690/1190 ↓684 ⊙6 214.6 MB · 5.1 MB/s ETA 01:24

سایت شما در هر لوکیشن nsin جداگانه کش می‌شود، پس یک آدرس می‌تواند چند نسخه‌ی ذخیره‌شده داشته باشد. با --node انتخاب می‌کنید کدام نسخه را دانلود کنید:

Terminal window
./nsin-dump-cache.sh example.com # پیش‌فرض: IR
./nsin-dump-cache.sh example.com --node TH
./nsin-dump-cache.sh example.com --node any # هر نسخه‌ای که اول در فهرست بیاید

نام لوکیشن‌ها همان‌هایی است که در فهرست آیتم‌های کش‌شده و در جمع‌های هر لوکیشن می‌بینید و به بزرگی و کوچکی حروف حساس است. اگر لوکیشن انتخابی چیزی نداشته باشد، اسکریپت می‌گوید کدام لوکیشن‌ها دارند:

nothing at node NY. cached at: IR (1284), TH (233)

--node any بیشترین پوشش را می‌دهد — فایلی که فقط در یک لوکیشن کش شده هم می‌آید — با این تفاوت که نسخه‌ها از هر لوکیشنی که باشند برداشته می‌شوند.

فایل‌ها کجا ذخیره می‌شوند

Section titled “فایل‌ها کجا ذخیره می‌شوند”

فایل‌ها در پوشه‌ی جاری (یا --out) نوشته می‌شوند، برای هر دامنه یک پوشه:

example.com/
├── index.html
├── assets/
│ ├── hero.webp
│ └── app.4f2c.js
└── cdn.example.com/ ← هر هاست دیگر، زیرپوشه‌ی خودش را دارد
└── logo.png
  • ساب‌دامنه‌ها و هاست‌های وایلدکارت زیرپوشه‌ی جداگانه می‌گیرند تا دو /logo.png متفاوت روی هم نوشته نشوند.
  • آدرس‌هایی که پسوند ندارند بر اساس نوع محتوای ذخیره‌شده نام‌گذاری می‌شوند — /media/8412 که WebP کش شده به‌صورت 8412.webp ذخیره می‌شود.
  • وقتی یک آدرس با کوئری‌های مختلف کش شده باشد (/search?q=a و /search?q=b)، هرکدام یک پسوند کوتاه می‌گیرند تا هر دو نگه داشته شوند: search~e244bbd4.html و search~a96c6999.html.
  • فایل‌ها بدون فشرده‌سازی بیرون می‌آیند، دقیقاً همان‌طور که nsin ذخیره‌شان کرده، حتی اگر بازدیدکننده‌ها نسخه‌ی gzip را بگیرند.
سوییچمتغیر محیطیکارکرد
--node NAME, -nNSIN_NODEنسخه‌ی کدام لوکیشن گرفته شود. پیش‌فرض IR؛ مقدار any یعنی هر نسخه‌ای که در فهرست بیاید.
--images, -iIMAGES=1فقط تصاویر. حالت پیش‌فرض همه‌ی آیتم‌های کش‌شده را می‌گیرد.
--out DIR, -oOUTDIRمحل ذخیره. پیش‌فرض: پوشه‌ی جاری.
-j NCONCURRENCYتعداد دانلود هم‌زمان. پیش‌فرض ۸.
-kINSECURE=1نادیده‌گرفتن بررسی گواهی HTTPS.
-hنمایش راهنما.
NSIN_API_KEYالزامی. کلید API شما.
NSIN_APIآدرس پایه‌ی API. پیش‌فرض https://api.nsin.ir.

برای هر آیتم دو درخواست به api.nsin.ir:

۱. فهرست‌گرفتنGET /domains/<domain>/cache/keys که به‌طور کامل و صفحه‌به‌صفحه خوانده و به لوکیشن انتخابی محدود می‌شود. همان داده‌ای که جدول آیتم‌های کش‌شده نشان می‌دهد.

۲. دانلودGET /domains/<domain>/cache/keys/content برای هر سطر، که بایت‌های ذخیره‌شده‌ی همان آیتم را برمی‌گرداند.

هر آیتم با hostname و node و key_hash همان سطر آدرس‌دهی می‌شود — یعنی همان هویتی که با آن ذخیره شده است. هیچ بخشی از این مسیر به سایت شما کاری ندارد: نه درخواستی به لبه، نه درخواستی به سرور شما.

پیام «not found, or this key’s user has no access» می‌گیرم. نام دامنه باید دقیقاً همان چیزی باشد که در پنل می‌بینید، و کلید باید متعلق به حسابی باشد که مالک آن دامنه است یا دامنه با آن به اشتراک گذاشته شده است.

تعداد فایل‌ها خیلی کمتر از عدد پنل است. عدد پنل مجموع همه‌ی لوکیشن‌هاست. اجرای معمولی فقط نسخه‌های یک لوکیشن را برمی‌دارد — --node any را امتحان کنید.

می‌توانم با آن سایت را منتقل کنم؟ فایل‌های عمومی و کش‌شده را به شما می‌دهد — مفید است، اما نسخه‌ی پشتیبان سرور نیست. چیزهای پشت ورود کاربر، هر چیزی که کش‌نشدنی علامت خورده، و صفحه‌هایی که کسی بازدید نکرده هرگز ذخیره نشده‌اند.