تغییر نیم سرور بدون قطعی سایت؛ راهنمای عملی

قبل از تغییر نیم سرور، رکوردها را کپی و TTL را کم کنید تا سایت بدون قطعی جابه‌جا شود. ترتیب کارها و اشتباه‌های رایج را ببینید.

۷ دقیقه به‌روزرسانی ۱۸ آبان ۱۴۰۵

سایت روی هاست قدیمی بالا می‌آید، هاست جدید آماده است، و شما در پنل دامنه ایستاده‌اید با دو کادر خالی جلوی Nameserver 1 و Nameserver 2. اگر همین حالا ذخیره کنید، احتمالاً چند ساعت بعد با پیام «سایت باز نمی‌شود» یا صفحهٔ پیش‌فرض هاست جدید روبه‌رو می‌شوید. مشکل از نیم سرور نیست؛ از ترتیبی است که کارها را انجام می‌دهید.

قبل از تغییر نیم سرور، رکوردها را کپی کنید

نیم سرور یعنی اعلام به رجیستری که «از این لحظه، پاسخ‌های DNS این دامنه از فلان سرورها می‌آید». لحظه‌ای که این اعلام ثبت می‌شود، تمام رکوردهایی که در DNS قبلی بود از دید اینترنت کنار می‌روند. اگر رکورد MX شرکت را جایی یادداشت نکرده باشید، ایمیل‌ها بی‌صدا گم می‌شوند و کسی تا فردا متوجه نمی‌شود.

پس اولین قدم، خروجی گرفتن است. روی لینوکس:

dig +noall +answer example.ir A
dig +noall +answer example.ir MX
dig +noall +answer example.ir TXT
dig +noall +answer www.example.ir CNAME
dig +noall +answer _dmarc.example.ir TXT

خروجی را در یک فایل ذخیره کنید، نه در چت. رکوردهای TXT را دست‌کم نگیرید: تأیید دامنه در Google Workspace، رکورد SPF، و _dmarc همه آنجا هستند و بازسازی‌شان از حافظه کار سختی است. اگر DNS فعلی روی پنل مدیریتی است، از صفحهٔ Zone File یک اسکرین‌شات هم بگیرید. برای دیدن اینکه همین حالا چه چیزی منتشر شده، بررسی رکوردهای DNS سریع‌ترین راه است.

رکوردهایی که تقریباً همیشه فراموش می‌شوند

  • MX و رکوردهای TXT مربوط به ایمیل (SPF، DKIM، DMARC)
  • زیردامنه‌های کاری: mail، ftp، vpn، staging
  • رکورد CAA اگر صدور SSL را محدود کرده بودید
  • رکوردهای تأیید سرویس‌های بیرونی مثل پنل پیامک یا درگاه پرداخت

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

TTL را کم کنید، اما نه در همان روز

هر رکورد DNS یک عدد TTL دارد؛ یعنی چند ثانیه رزولورها اجازه دارند پاسخ را کش کنند. مقدار رایج ۳۶۰۰ یا ۸۶۴۰۰ ثانیه است. اگر با TTL هشتاد‌و‌شش‌هزار ثانیه‌ای نیم سرور را عوض کنید، تا یک روز کامل بعضی کاربران سایت قدیمی را می‌بینند و بعضی سایت جدید را. این حالت بدترین وضعیت است، چون دیباگ کردنش تقریباً غیرممکن می‌شود.

کاری که می‌کنم این است: دست‌کم ۴۸ ساعت قبل از سوییچ، TTL همهٔ رکوردهای مهم را به ۳۰۰ ثانیه کاهش می‌دهم. صبر می‌کنم تا کش قبلی منقضی شود، بعد نیم سرور را عوض می‌کنم. بعد از اینکه مطمئن شدم همه‌چیز درست است، TTL را به مقدار قبلی برمی‌گردانم.

هزینه‌اش را هم بگویم: TTL پایین یعنی تعداد کوئری‌های DNS شما چند برابر می‌شود. روی دامنه‌ای با ترافیک بالا و DNS ضعیف، این یعنی تأخیر بیشتر در resolve و بار بیشتر روی سرور نیم‌سرور. برای یک هفته اشکالی ندارد؛ برای همیشه نه.

پنجرهٔ انتشار را واقع‌بینانه انتخاب کنید

«انتشار DNS» یک فرآیند جادویی نیست؛ فقط یعنی صبر می‌کنیم تا کش‌ها منقضی شوند. با TTL سیصد ثانیه‌ای، عملاً ده تا سی دقیقه بعد همه‌جا رکورد جدید دیده می‌شود. اما دو استثنا هست: بعضی ISPها TTL را نادیده می‌گیرند و تا چند ساعت کش خودشان را نگه می‌دارند، و رزولورهای محلی روی سیستم کاربر ممکن است روزها چیزی را عوض نکنند. جزئیات این رفتار را در انتشار DNS چیست و چرا زمان می‌برد؟ راهنمای کامل TTL و کش نوشته‌ام.

پنجره را روی ساعات کم‌ترافیک بگذارید. برای سایت ایرانی، بین دو تا پنج بامداد منطقی‌تر از عصر جمعه است. اگر فروشگاه دارید و شبانه سفارش می‌گیرید، این قاعده را دور بزنید و به‌جایش وسط هفته و ساعت اداری کار کنید تا اگر چیزی خراب شد، کسی باشد که جواب بدهد.

ترتیب درست کارها

  1. خروجی کامل Zone فعلی را بگیرید و ذخیره کنید.
  2. روی DNS جدید، همهٔ رکوردها را از قبل بسازید. هنوز نیم سرور را عوض نکنید.
  3. رکورد A دامنهٔ اصلی را به IP سرور جدید بدهید و مطمئن شوید وب‌سرور جواب می‌دهد.
  4. TTL را به ۳۰۰ کاهش دهید و ۴۸ ساعت صبر کنید.
  5. نیم سرور را در پنل رجیسترار عوض کنید.
  6. با dig از چند نقطه چک کنید که رکورد جدید منتشر شده.
  7. SSL را بگیرید یا منتقل کنید، بعد TTL را برگردانید.

مرحلهٔ سوم را جدی بگیرید. اگر IP جدید را از قبل تست نکرده باشید، بعد از سوییچ فقط یک صفحهٔ خطای وب‌سرور می‌بینید و نمی‌دانید مشکل DNS است یا کانفیگ. برای اطمینان از این مرحله، راهنمای اتصال دامنه به سرور مجازی؛ راهنمای کامل رکورد A تا SSL ترتیب دقیق رکورد A تا صدور گواهی را پوشش می‌دهد.

این‌جا اشتباه می‌کنند

رایج‌ترین اشتباهی که دیده‌ام این است: نیم سرور عوض می‌شود، سایت روی هاست جدید بالا نمی‌آید، و مدیر سایت فوراً نیم سرور را به حالت قبل برمی‌گرداند. نتیجه؟ دو بار انتشار، دو بار انتظار، و کاربرانی که حالا ترکیبی از دو کش مختلف را می‌بینند. نشانه‌اش این است که یک ساعت بعد از برگرداندن، بعضی کاربران هنوز سایت جدید را می‌بینند و بعضی سایت قدیمی را.

علت واقعی معمولاً این است که رکورد A روی DNS جدید ساخته نشده، یا وب‌سرور جدید روی دامنهٔ اصلی VirtualHost ندارد و فقط به IP جواب می‌دهد. قبل از هر برگرداندنی، این را چک کنید:

dig @ns1.newdns.ir example.ir A +short
curl -I -H "Host: example.ir" http://NEW_IP/

اگر دستور اول IP درست را برگرداند و دستور دوم کد ۲۰۰ بدهد، مشکل DNS نیست و برگرداندن نیم سرور فقط وضع را بدتر می‌کند. اگر خطای SERVFAIL یا NXDOMAIN گرفتید، مشکل در Zone جدید است. ترتیب بررسی نشانه‌ها را در راهنمای عملی عیب‌یابی DNS: نشانه‌ها و ترتیب بررسی رکوردها قدم‌به‌قدم آورده‌ام.

نیم سرور یا رکورد A؟

لازم نیست همیشه نیم سرور را عوض کنید. اگر فقط می‌خواهید سایت به سرور دیگری برود و DNS فعلی را دوست دارید، کافی است رکورد A را عوض کنید. این کار سریع‌تر است، Zone را از دست نمی‌دهید، و ایمیل دست نمی‌خورد.

روشکِی انتخابش می‌کنمهزینه‌اش
تغییر رکورد ADNS فعلی پایدار است و فقط مقصد عوض می‌شودکنترل کم روی رکوردهای دیگر، وابستگی به پنل قبلی
تغییر نیم سرورمی‌خواهم DNS را کامل به دست بگیرم یا پنل قبلی در دسترس نیستریسک از دست رفتن رکوردها، زمان انتشار طولانی‌تر

انتخاب من در بیشتر موارد تغییر رکورد A است. فقط وقتی نیم سرور را عوض می‌کنم که پنل DNS فعلی محدودیت دارد، یا می‌خواهم همهٔ رکوردها را زیر یک پنل واحد جمع کنم. اگر دامنه‌تان .ir است، حواستان به شناسه ایرنیک و محدودیت‌های رجیسترار باشد؛ راهنمای کامل ثبت و مدیریت دامنه ir با شناسه ایرنیک این تفاوت‌ها را توضیح می‌دهد.

یک نکتهٔ عملی دربارهٔ SSL

گواهی SSL را قبل از سوییچ روی سرور جدید نصب کنید، نه بعد از آن. اگر از Let's Encrypt استفاده می‌کنید، صدور گواهی نیاز به resolve شدن دامنه به سرور جدید دارد؛ پس ترتیب درست این است: رکورد را عوض کنید، صبر کنید منتشر شود، بعد گواهی بگیرید. اگر سایت شما روی هاست اشتراکی لینوکس میزبانی می‌شود، معمولاً این مرحله از پنل با یک کلیک انجام می‌شود و نیازی به دست‌کاری دستی کانفیگ وب‌سرور نیست.

و اگر دامنه در آستانهٔ انقضاست، اول تمدیدش کنید. تغییر نیم سرور روی دامنه‌ای که دو روز بعد منقضی می‌شود، فقط دردسر را دو برابر می‌کند. مراحل و پنجرهٔ نجات را در تمدید دامنه؛ راهنمای کامل مراحل انقضا و نجات دامنه ببینید.

پرسش‌های پرتکرار

تغییر نیم سرور چقدر طول می‌کشد تا اعمال شود؟

در خوش‌بینانه‌ترین حالت بین ۳۰ دقیقه تا ۲ ساعت، به شرطی که TTL را از قبل به ۳۰۰ ثانیه کاهش داده باشید. اگر TTL را دست نزده باشید و روی ۸۶۴۰۰ ثانیه باشد، باید تا ۲۴ ساعت صبر کنید.

نکتهٔ مهم این است که زمان اعمال در رجیستری و زمان انتشار در کش‌ها دو چیز متفاوت‌اند. رجیستری ممکن است چند دقیقه‌ای ثبت کند، اما رزولورها تا انقضای کش خودشان چیزی را عوض نمی‌کنند.

آیا تغییر نیم سرور باعث قطعی سایت می‌شود؟

اگر رکوردها را از قبل روی DNS جدید ساخته باشید و TTL را کم کرده باشید، قطعی محسوسی نخواهید داشت. قطعی وقتی رخ می‌دهد که DNS جدید خالی باشد یا رکورد A اشتباه وارد شده باشد.

در عمل چیزی که کاربر می‌بیند خطای DNS_PROBE_FINISHED_NXDOMAIN در مرورگر است یا صفحهٔ پیش‌فرض هاست. هر دو نشانهٔ این هستند که Zone جدید کامل نیست.

بعد از تغییر نیم سرور، ایمیل‌ها چه می‌شوند؟

اگر رکوردهای MX و TXT را روی DNS جدید کپی نکرده باشید، ایمیل‌های ورودی bounce می‌شوند. این خطا در لاگ سرور فرستنده به شکل «no MX record found» دیده می‌شود و اغلب چند ساعت بعد از سوییچ کشف می‌شود.

قبل از سوییچ، با dig MX example.ir خروجی را ذخیره کنید و بعد از سوییچ همان دستور را روی نیم‌سرور جدید تکرار کنید. اگر خروجی یکی نبود، همان‌جا متوقف شوید.

می‌توانم نیم سرور را به حالت قبل برگردانم؟

بله، اما این کار را فقط وقتی بکنید که مطمئن شده‌اید مشکل از DNS جدید است. برگرداندن نیم سرور یک انتشار کامل دیگر ایجاد می‌کند و تا چند ساعت وضعیت ناهمگون می‌ماند.

قبل از برگرداندن، با dig @ns1.newdns.ir example.ir A +short چک کنید که Zone جدید جواب درست می‌دهد یا نه. اگر جواب درست بود، مشکل جای دیگری است و برگرداندن نیم سرور فقط زمان از دست دادن است.

خلاصهٔ کاری که همین امروز باید بکنید: خروجی Zone را بگیرید، TTL را به ۳۰۰ برسانید، و رکوردها را روی DNS جدید بسازید. سوییچ را بگذارید برای ۴۸ ساعت بعد.

آیا این مطلب برایتان مفید بود؟