در پایان این راهنما، فیلد quickcdn رکورد موردنظر را روی false میگذاریم. پاسخ عمومی DNS دوباره مقدار خود رکورد میشود و بازدیدکننده مستقیم به مقصد رکورد میرود.
خاموش کردن ابر در پنل از ستون وضعیت CDN است. در این راهنما همین کار را با API نسخه ۲.۱ و JSON Patch انجام میدهیم. دکمه ابر (quickcdn) چیست؟ را مطالعه میکنیم.
مرجع مسیرها: CDN and DNS (v2.1). ساخت توکن و WorkspaceUUID را در مدیریت دامنه خود را با API خودکار کنید دنبال میکنیم.
پیشنیازها
- دامنه با مدیریت DNS در ستون — اولین دامنه را به DNS ستون منتقل کنید
- توکن Bearer با نقش
dns-editor - شناسهی فضای کاری (
WorkspaceUUID) از فضاهای کاری - ابر رکورد موردنظر روشن باشد؛ یعنی فیلد
quickcdnدر پاسخGETبرابرtrueباشد
مراحل
- توکن و
WorkspaceUUIDرا آماده میکنیم. - فهرست Zoneها را دریافت میکنیم و Zone دامنه را از
spec.originپیدا میکنیم. مقدارmetadata.nameهمان<NAME>است:
curl -sS -X GET \
"https://api.sotoon.ir/delivery/v2.1/global/workspaces/<workspaceUUID>/domainzones" \
-H "Authorization: Bearer <TOKEN>"- همان Zone را میخوانیم تا نام رکورد و ایندکس آن در آرایه مشخص شود:
curl -sS -X GET \
"https://api.sotoon.ir/delivery/v2.1/global/workspaces/<workspaceUUID>/domainzones/<NAME>" \
-H "Authorization: Bearer <TOKEN>"پارامتر
<NAME>
<NAME>همانmetadata.nameآبجکت DomainZone است، نه لزوما نام دامنه.
در spec.records هر کلید یک نام رکورد است و مقدار آن آرایهای از رکوردهاست. ایندکس از صفر شروع میشود و باید به همان عنصری اشاره کند که "quickcdn": true دارد. برای زیردامنه api که اولین رکورد آن ابر روشن دارد، مسیر /spec/records/api/0/quickcdn است.
| نام رکورد | مسیر JSON Patch |
|---|---|
دامنهی ریشه، @ | /spec/records/@/0/quickcdn |
وایلدکارد (Wildcard)، * | /spec/records/*/0/quickcdn |
یک برچسب، مثلا api | /spec/records/api/0/quickcdn |
اگر "quickcdn": true روی اولین عنصر آرایه نیست، 0 را با ایندکس همان عنصر جایگزین میکنیم.
- فیلد را با عملیات
replaceرویfalseمیگذاریم. نمونه برای زیردامنهapi:
curl -sS -X PATCH \
"https://api.sotoon.ir/delivery/v2.1/global/workspaces/<workspaceUUID>/domainzones/<NAME>" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json-patch+json" \
-d '[
{ "op": "replace", "path": "/spec/records/api/0/quickcdn", "value": false }
]'برای دامنهی ریشه، مسیر را /spec/records/@/0/quickcdn میگذاریم. api و ایندکس را با نام و جایگاه واقعی رکورد جایگزین میکنیم.
JSON Patch
Content-Typeبایدapplication/json-patch+jsonباشد. عملیاتreplaceفقط مقدار فیلدquickcdnرا عوض میکند؛ بقیه فیلدهای همان رکورد و بقیه نامها درspec.recordsبدون تغییر میمانند. اگر نام رکورد نویسه/یا~داشته باشد، در مسیر JSON Pointer بهترتیب آن را به~1و~0تبدیل میکنیم.
مسیر باید وجود داشته باشد
replaceفقط وقتی اعمال میشود که مسیر مشخصشده در آبجکت وجود داشته باشد. نام رکورد و ایندکس را از پاسخGETپیدا میکنیم. اگر ابر از قبل خاموش باشد و فیلدquickcdnدر پاسخ نباشد،replaceروی این مسیر اعمال نمیشود.
بررسی صحت
- دوباره همان Zone را با
GETمیخوانیم. مقدارquickcdnرکورد موردنظر دیگرtrueنیست. اگر API مقدارfalseرا در پاسخ نشان ندهد، نبودن فیلدquickcdnیعنی ابر خاموش است. - کد پاسخ
PATCHوGETنباید401/403باشد؛ در غیر این صورت توکن و نقشdns-editorرا بررسی میکنیم. اگر404است،<NAME>را باmetadata.nameمقایسه میکنیم. - دستکم
300ثانیه صبر میکنیم. در مدتی که ابر روشن بوده، TTL پاسخ Anycast همین مقدار است و Resolver ممکن است پاسخ قبلی را در کش نگه دارد. - با یکی از نامسرورهای ستون در
spec.nameserversV4رکورد را بررسی میکنیم:
dig @a.ns.sotoon53.com api.example.com Aنامسرور را با یکی از مقادیر nameserversV4 و نام دامنه را با رکورد واقعی جایگزین میکنیم. پاسخ باید مقدار خود رکورد باشد، نه آدرس Anycast وبسایت.
