محدودیت اینترنت بین الملل؛ سایت ایرانی خودت را کجا محافظت کنی
وقتی محدودیت اینترنت بین الملل میاد، میزبانی خارجی، DNS، درگاه پرداخت و API ها اول آسیب می بینن. اول فهرست وابستگی ها را دربیار و بعد برای هر کدام تصمیم درست بگیر.

وقتی محدودیت اینترنت بین الملل میاد، اول از همه وابستگی هایی آسیب می بینن که مسیر اصلی سایتت رو می بندن: میزبانی خارج از ایران، DNS، درگاه پرداخت، پیامک، کپچا و API های خارجی. فونت، آنالیتیکس و ویجت ها بیشتر تجربه کاربر رو خراب می کنن و با چند تغییر ساده درست می شن. لازم نیست همه چیز رو داخلی کنی. برای هر وابستگی یکی از سه کار رو انتخاب کن: جایگزین داخلی، پشتیبان کنار سرویس اصلی، یا نگه داشتن همون سرویس با یه محافظ. معیار انتخاب رو پایین به صورت «اگه این، پس اون» نوشتم.
محدودیت اینترنت بین الملل دقیقاً کجا سایتت رو گیر می ندازه؟
سه مشکل مختلف معمولاً با هم قاطی می شن و راه حل هر کدوم فرق داره.
- کندی یا قطعی مسیر بین الملل. سرویس سالمه، ولی بسته ها از مرز به سختی رد می شن. ساعت های اوج ترافیک بدتر می شه. نشونه اش اینه که سرویس گاهی جواب می ده و گاهی تایم اوت می شه.
- دسترسی انتخابی. بعضی دامنه ها یا IP ها از ایران باز نمی شن، ولی بقیه اینترنت کار می کنه. این یکی رو با تست از چند اپراتور می فهمی.
- محدودیت از سمت خود سرویس. بعضی سرویس های خارجی خودشون دسترسی از ایران رو می بندن یا حساب ها رو محدود می کنن. این به شبکه ربطی نداره و با تنظیمات شبکه درست نمی شه. باید جایگزین پیدا کنی.
یه نکته مهم هم هست: سمت ارتباط رو جدا بررسی کن. گاهی مرورگر کاربر ایرانی به منبع خارجی وصل می شه (مثل فونت یا اسکریپت). گاهی سرور خودت به سرویس خارجی وصل می شه (مثل API نرخ ارز). مورد اول صفحه رو کند می کنه. مورد دوم می تونه کل صفحه یا سفارش رو قفل کنه، چون کدت منتظر جواب می مونه.
اول فهرست وابستگی ها رو دربیار
بدون فهرست، همه تصمیم ها حدسیه. دو جا رو چک کن.
سمت مرورگر. صفحه اصلی رو باز کن، F12 رو بزن و برو تب Network. دامنه ها رو ببین. هر دامنه ای که مال تو نیست، یه وابستگی خارجیه. فونت، اسکریپت آنالیتیکس، ویجت چت، نقشه و کپچا رو همین جا پیدا می کنی.
سمت سرور. اینجا باید توی کد بگردی. اگه سایتت وردپرسه، توی پوشه سایت این دستور رو بزن:
grep -rEho "https?://[a-zA-Z0-9.-]+" wp-content/themes wp-content/plugins | sort | uniq -c | sort -rn | head -30
این دستور پرتکرارترین آدرس های بیرونی داخل قالب و افزونه ها رو نشون می ده. بعضی ها فقط لینک مستنداتن و بعضی ها تماس واقعی API. هر کدوم رو بخون تا بفهمی موقع اجرای سایت صدا زده می شه یا نه. تماس هایی که آدرسشون توی تنظیمات یا دیتابیس ذخیره شده رو اینجا نمی بینی.
دو جای دیگه رو هم فراموش نکن: تنظیمات DNS و سرویس ایمیل. این دو توی کد دیده نمی شن. اگه DNS از کار بیفته، سایت اصلاً پیدا نمی شه. اگه ایمیل از کار بیفته، رسید سفارش و بازیابی رمز به دست کاربر نمی رسه.
کدوم وابستگی چقدر ریسک داره؟
ریسک رو با یه سوال می سنجم: اگه این سرویس جواب نده، کاربر می تونه کارش رو تموم کنه یا نه؟
| وابستگی | اگه قطع شد چی می شه | شدت | پیشنهاد |
|---|---|---|---|
| میزبانی سایت خارج از ایران | کندی یا قطعی کامل برای کاربر ایرانی | بالا | جایگزین داخلی |
| DNS | سایت اصلاً پیدا نمی شه | بالا | پشتیبان یا جایگزین |
| درگاه پرداخت | سفارش کامل نمی شه | بالا | درگاه داخلی با مسیر بازگشت جدا |
| پیامک و کد یکبار مصرف | ورود و ثبت نام قفل می شه | بالا | دو ارائه دهنده |
| API خارجی در مسیر صفحه | صفحه معطل می مونه یا خطا می ده | متوسط تا بالا | تایم اوت و کش |
| کپچای خارجی | فرم ها بالا نمیان یا رد می شن | متوسط | کپچای داخلی یا فایروال |
| ایمیل تراکنشی | رسید و بازیابی رمز نمی رسه | متوسط | پشتیبان |
| CDN خارجی | فایل های استاتیک کند می شن | متوسط | بسته به مخاطب |
| فونت، آنالیتیکس، ویجت | صفحه دیر کامل می شه | پایین | self-host یا حذف |

قاعده تصمیم: جایگزین، پشتیبان یا همون سرویس با محافظ؟
اگه مخاطبت ایرانیه و سرویس توی مسیر اصلیه، جایگزین داخلی بذار
یه فروشگاه رو در نظر بگیر که همه مشتری هاش ایرانی ان و با پول ایران پرداخت می کنن. برای چنین سایتی بهترین چیدمان اینه: میزبانی توی ایران، درگاه شاپرکی و پیامک از ارائه دهنده داخلی. هیچ بخشی از خرید نباید به عبور از مرز بستگی داشته باشه. فقط یادت باشه کیفیت جایگزین رو واقعاً تست کنی، نه فقط قیمتش رو. تاخیر، پایداری در ساعت اوج و پشتیبانی رو چک کن.
اگه سرویس خارجی واقعاً بهتره، کنارش پشتیبان بذار
بعضی سرویس ها هنوز بهترن، مثل یه API تخصصی یا ابزار تحلیلی. حذفشون عاقلانه نیست. کاری کن که قطع شدنشون سایت رو نخوابونه. یعنی یا یه مسیر دوم داشته باشی، یا سایت بدون اون سرویس هم کار کنه.
اگه سرویس خارجی لازمه و جایگزین نداره، امنش کن
گاهی چاره ای نیست. مثلاً اپلیکیشنت به یه API خارجی وصله که مشابه داخلی نداره. اینجا باید تماس رو از مسیر کاربر دور کنی: تایم اوت کوتاه، کش آخرین جواب سالم و پیام خطای قابل فهم.
یه نمونه برای وردپرس:
$response = wp_remote_get( 'https://api.example.com/rates', [ 'timeout' => 3 ] );
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
// اگه جواب نیومد، آخرین مقدار سالم رو نشون بده
$rates = get_transient( 'rates_last_good' );
} else {
$rates = json_decode( wp_remote_retrieve_body( $response ), true );
set_transient( 'rates_last_good', $rates, DAY_IN_SECONDS );
}
تایم اوت پیش فرض این تابع حدود ۵ ثانیه است. اگه چند تماس پشت هم بیاد و سرویس جواب نده، این زمان ها جمع می شن و کاربر چند ثانیه به صفحه خالی نگاه می کنه. با تایم اوت ۳ ثانیه ای و کش، کاربر یه عدد قدیمی تر می بینه ولی صفحه باز می شه. این کد رو سر راه هر بازدید نذار. بهتره جواب سالم رو هر چند دقیقه یه بار توی کش بریزی و صفحه همیشه از کش بخونه.

میزبانی و DNS: دو جایی که اشتباهشون گرون تموم می شه
میزبانی. اگه کاربرهات ایرانی ان و سایتت روی سرور خارجیه، هر درخواست باید از مسیر بین الملل رد بشه. توی روزهای عادی شاید حس نکنی. توی دوره محدودیت، همین مسیر اولین چیزیه که کند می شه. انتقال به میزبانی داخلی معمولاً بیشترین اثر رو با کمترین پیچیدگی داره. استثنا وقتیه که مخاطب اصلی تو خارج از ایرانه. اون موقع سرور خارجی منطقیه، ولی بهتره یه کپی آماده داخل ایران هم داشته باشی.
اگه می خوای سایت رو منتقل کنی، ما هم میزبانی وب و سرور مجازی ایران ارائه می دیم. ولی معیار انتخاب همون بالاست: تاخیر، پایداری در ساعت اوج و بکاپ قابل بازیابی.
DNS. اگه nameserver های دامنه ات پشت سرویس خارجی باشن و دسترسی بهشون مختل بشه، سایت سالم هم پیدا نمی شه. چند کار مشخص:
- ببین nameserver های فعلی کجان و از چند اپراتور ایرانی جواب می دن.
- TTL رکوردهای مهم رو قبل از هر تغییر یا انتقال کم کن (مثلاً حدود ۳۰۰ ثانیه) و صبر کن TTL قبلی تموم بشه. اگه بعداً لازم شد IP عوض کنی، تغییر زودتر اعمال می شه.
- اگه ارائه دهنده DNS ات از secondary DNS یا چند ارائه دهنده پشتیبانی می کنه، ازش استفاده کن.
- برای دامنه .ir، تنظیم nameserver از طریق پنل ثبت کننده دامنه انجام می شه. روندش رو توی ثبت دامنه ir قدم به قدم توضیح دادیم.
اگه تفاوت رکوردهای A و CNAME و TXT یادت نیست، رکورد DNS چیست؟ تفاوت A، CNAME، MX و TXT با مثال رو بخون. بدون اون، دست بردن توی DNS وسط بحران خطرناکه.
درگاه پرداخت و پیامک: اینجا پول و ورود کاربر گیره
درگاه های شاپرکی معمولاً زیرساخت داخلی دارن، پس خود درگاه کمتر از محدودیت بین الملل ضربه می خوره. مشکل اغلب جای دیگه ایه: سایت خودت. یه خطای رایج اینه که مسیر بازگشت از درگاه، زیر قانون های فایروال سایت و محدودیت های ورود بمونه. اگه فایروال یا یه قانون سخت گیرانه درخواست برگشتی رو ببنده، کاربر پول رو پرداخت کرده ولی سفارش ثبت نشده. پرداخت نیمه کاره می مونه و تماس های پشتیبانی بالا می ره.
اگه سایتت سفارش داره، این چند چیز رو چک کن:
- آدرس callback درگاه رو توی فایروال و CDN از چک ها و کپچا مستثنا کن.
- اگه سرویس خارجی توی تایید تراکنش دخالت داره، اون تماس رو هم تایم اوت دار کن.
- یه صفحه «پیگیری سفارش» بذار تا کاربر بدون پرداخت دوباره وضعیت رو ببینه.
پیامک. اگه ورود با کد یکبار مصرف داری، یه ارائه دهنده کافی نیست. دو ارائه دهنده داخلی بگیر و کدت رو طوری بنویس که اگه اولی خطا داد، سراغ دومی بره. فقط مراقب باش کاربر دو کد مختلف نگیره. کد اول رو ابطال کن یا هر دو رو تا چند دقیقه معتبر بدون.
کپچا و امنیت: بدون اینکه کاربر عادی رو اذیت کنی
کپچای خارجی گاهی دیر لود می شه یا اصلاً بالا نمیاد. نتیجه اش اینه که کاربر نمی تونه فرم رو بفرسته. دو راه داری: کپچای داخلی یا self-host، یا اینکه کپچا رو به همه نشون ندی.
ما راه دوم رو ترجیح می دیم. فایروال سایت IP های مشکوک رو پیش از رسیدن به برنامه مسدود می کنه یا فقط به اون ها کپچا نشون می ده. کاربر عادی هیچی نمی بینه و ترافیک مخرب هم سرورت رو درگیر نمی کنه. وابستگی خارجی هم کمتر می شه، چون کپچا فقط برای تعداد کمی از درخواست ها لازم می شه.
یه اشتباه رایج هم اینه که کپچا رو روی همه صفحه ها فعال کنی. کاربری که روی موبایل ضعیف نشسته، نصف فرم رو پر کرده و کپچا بالا نمیاد، دیگه برنمی گرده.
فونت، اسکریپت و ویجت: ساده ترین بخش کار
این بخش ریسک کمتری داره، ولی سریع ترین نتیجه رو می ده. فونت رو روی هاست خودت بذار:
@font-face {
font-family: "Vazirmatn";
src: url("/fonts/Vazirmatn.woff2") format("woff2");
font-display: swap;
}
font-display: swap باعث می شه متن اول با فونت جایگزین نشون داده بشه و بعد عوض بشه. بدون اون، بعضی مرورگرها تا لود فونت متن رو نشون نمی دن.
برای اسکریپت ها هم همین منطق رو دنبال کن. آنالیتیکس رو با async یا defer لود کن. ویجت چت و نقشه رو فقط توی صفحه هایی بذار که لازمشونه. اگه ویجتی توی هیچ تصمیمی به کار نمیاد، حذفش کن. این کارها می تونه روی سرعتی که کاربر حس می کنه اثر محسوسی بذاره. توضیح کاملش توی بهبود LCP سایت؛ چرا بزرگ ترین عنصر صفحه دیر نمایش داده می شود؟ هست.
درباره CDN: CDN خارجی برای مخاطب ایرانی همیشه مفید نیست، چون بسته به مسیر ممکنه کندتر هم بشه. قبل از تصمیم، از چند اپراتور تست بگیر. بحث کاملش توی CDN برای سایت؛ آیا جای هاست قوی را می گیرد؟ اومده.
ایمیل و بکاپ: دو چیزی که وقتی لازمشون شدی دیر شده
ایمیل. اگه رسید سفارش، بازیابی رمز و اعلان ها از طریق سرویس خارجی می ره، یه مسیر پشتیبان داخلی یا SMTP خود هاست بذار. SPF و DKIM رو هم درست تنظیم کن، وگرنه پشتیبان هم توی اسپم می افته. دو مقاله ارسال ایمیل وردپرس؛ چرا پیام موفق است ولی نمی رسد؟ و اسپم شدن ایمیل؛ مشکل از هاست است یا فرستنده؟ همین مشکل رو باز کردن.
بکاپ. اگه بکاپ هات فقط روی یه فضای ابری خارجی باشن، همون روزی که لازمشون داری شاید بهشون نرسی. یه کپی هم توی ایران نگه دار و مهم تر از اون، بازیابی رو واقعاً امتحان کن. بکاپی که هیچ وقت بازیابی نشده، فقط یه امیدواریه. روش تستش توی بکاپ سی پنل؛ آموزش تهیه و آزمایش بازیابی سایت هست.
یه چیز دیگه: بعد از ساختن پشتیبان ها، نظارت هم لازمه. اگه مسیر دوم رو هیچ وقت چک نکنی، موقع نیاز خراب از آب درمیاد. مانیتورینگ و پایداری دقیقاً برای همین کاره، ولی حتی یه چک ساده هر چند دقیقه که هر وابستگی مهم رو صدا بزنه، کافیه.
سوالات متداول
آیا باید همه چیز رو داخلی کنم؟
نه. فقط وابستگی هایی که مسیر خرید، ورود یا بالا اومدن صفحه رو می بندن باید داخلی یا پشتیبان دار بشن. فونت و ویجت رو می شه روی هاست خودت گذاشت یا حذف کرد. سرویس خارجی ای که واقعاً بهتره رو هم با تایم اوت و کش می شه نگه داشت.
اگه سایتم روی سرور خارجیه و مخاطبم ایرانیه، فوری منتقل کنم؟
اگه کاربرها از کندی یا قطعی شکایت دارن، بله. اگه هنوز مشکلی نیست، اول سایت رو روی میزبانی داخلی بالا بیار، بکاپ بگیر و تاخیر رو مقایسه کن. بعد با TTL کم و یه برنامه بازگشت، انتقال رو انجام بده.
چطور بفهمم یه سرویس خارجی از ایران محدود شده؟
از چند اپراتور و چند شبکه تست کن، نه فقط یه اینترنت. اگه فقط بعضی ها وصل نمی شن، مسئله مسیر و اپراتوره. اگه همه کاربرهای ایرانی خطا می گیرن، یا آدرس مسدود شده یا خود سرویس دسترسی از ایران رو بسته.
مسیر بازگشت درگاه چرا باید از فایروال جدا باشه؟
چون درخواست بازگشت از سمت درگاه میاد و برای فایروال ممکنه شبیه ترافیک مشکوک باشه. اگه فایروال یا کپچا اون رو مسدود کنه، پرداخت انجام شده ولی سفارش تایید نمی شه. این استثنا رو فقط برای آدرس مشخص callback بذار، نه کل سایت.
از کجا شروع کنم؟
سه کار رو امروز انجام بده. فهرست وابستگی ها رو با F12 و دستور grep دربیار. هر مورد رو توی جدول بالا بذار و شدتش رو مشخص کن. بعد اول سراغ بالاترین ها برو: میزبانی، DNS، درگاه پرداخت و پیامک. فونت و ویجت ها رو بعداً، توی یه عصر آروم درست کن.
اگه وسط کار به نظر دوم نیاز داشتی، می تونی با مشاوره و معماری ما هم صحبت کنی. ولی حتی بدون ما، همین فهرست و یه تست بازیابی بکاپ، سایتت رو از بیشتر غافلگیری ها دور نگه می داره.


