رفتن به محتوا
nsin docs

دانلود فایل‌های cache‌شده‌ی شما

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

nsin-dump-cache.sh این کار را از ترمینال شما انجام می‌دهد. یک یا چند دامنه به آن بدهید تا هر object cache‌شده را در یک پوشه به ازای هر دامنه بنویسد، با همان path و نام فایل اصلی.

فایل‌ها از cache storage nsin خوانده می‌شوند، نه از سایت شما گرفته می‌شوند. با سرور شما هیچ تماسی گرفته نمی‌شود، پس یک origin خاموش فرقی نمی‌کند.

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 و هر لینوکس رایج هست. چیز دیگری برای نصب نیست.

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

Terminal window
export NSIN_API_KEY="nsin_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

یک key read-only کافی است — اسکریپت فقط می‌خواند. ببینید API keys.

Terminal window
# One domain (at least one is required)
./nsin-dump-cache.sh example.com
# Several at once — each gets its own folder
./nsin-dump-cache.sh example.com shop.example.com example.ir
# A different edge location, images only, into a chosen folder, 12 at a time
./nsin-dump-cache.sh example.com --node TH --images --out ~/backup -j 12

برای هر دامنه یک progress bar زنده می‌گیرید — objectهای انجام‌شده، بایت‌های دانلودشده، سرعت، و یک ETA — با هر فایل تمام‌شده که بالای آن لیست می‌شود.

▶ 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

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

Terminal window
./nsin-dump-cache.sh example.com # IR, the default
./nsin-dump-cache.sh example.com --node TH
./nsin-dump-cache.sh example.com --node any # whichever copy is listed first

نام node‌ها با لیست Cached items یکسان است و به بزرگ/کوچک بودن حروف حساس است. اگر location انتخابی شما چیزی ندارد، اسکریپت می‌گوید کدام‌ها دارند:

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

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

فایل‌ها زیر پوشه‌ی فعلی (یا --out) قرار می‌گیرند، یک پوشه به ازای هر دامنه:

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

دو فراخوانی API به ازای هر object، هر دو به api.nsin.ir:

۱. List — GET /domains/<domain>/cache/keys، تا انتها صفحه‌بندی می‌شود، فیلترشده به node انتخابی. همان داده‌ی جدول Cached items پنل. ۲. Download — GET /domains/<domain>/cache/keys/content به ازای هر ردیف، که بایت‌های ذخیره‌شده‌ی آن entry را برمی‌گرداند.

هر entry با hostname، node و key_hash از ردیف لیست خود آدرس‌دهی می‌شود. اینجا چیزی با سایت شما تماس نمی‌گیرد: نه DNS lookup، نه درخواست به edge، نه درخواست به سرور شما.

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

فایل‌های خیلی کمتری از شمارش آیتم پنل می‌گیرم. شمارش پنل همه‌ی locationها را پوشش می‌دهد؛ یک اجرای تک --node فقط نسخه‌های همان location را می‌گیرد. --node any را امتحان کنید.

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