مفاهیم پایه

چرا ترافیک سرورم ناگهان بالا رفت؟ ۸ علت رایج و راه‌حل هرکدام

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۶ دقیقه

Gbps ≠ GBمفاهیم پایهچرا ترافیک سرورم ناگهانبالا رفت؟ ۸ علت رایج وراه‌حل هرکداممجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

افزایش ناگهانی ترافیک معمولاً یکی از این علت‌ها را دارد: ربات‌های خزنده و اسکرپرها، استفادهٔ مستقیم سایت‌های دیگر از فایل‌های شما (Hotlink)، انتشار یک لینک پربازدید، بکاپ یا همگام‌سازی اشتباه، به‌روزرسانی‌ها و دانلود ایمیج‌ها، باگ برنامه، حملهٔ DDoS یا هک شدن سرور. با vnStat زمان شروع، با iftop مقصد و با nethogs برنامهٔ مسئول را پیدا کنید و سپس راه‌حل همان علت را اجرا کنید.

اول تشخیص، بعد درمان

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

  1. از چه زمانی شروع شد؟ با vnstat -h و vnstat -d ساعت و روز شروع را پیدا کنید.
  2. ورودی است یا خروجی؟ ستون rx ورودی و tx خروجی است. علت‌های افزایش هر جهت متفاوت است.
  3. به کجا و توسط کدام برنامه؟ با iftop مقصد اتصال‌ها و با nethogs پروسهٔ مسئول را ببینید.

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

سه پرسش پیش از هر اقدام
  1. از کی شروع شد؟

    vnstat -h و vnstat -d زمان دقیق آغاز افزایش را نشان می‌دهند.

  2. ورودی یا خروجی؟

    ستون rx یا tx؛ علت‌های هر جهت متفاوت است.

  3. به کجا و از کدام برنامه؟

    iftop مقصد اتصال‌ها و nethogs پروسهٔ مسئول را مشخص می‌کند.

شکل ۱ پاسخ این سه پرسش، فهرست هشت علت را معمولاً به یکی دو مورد محدود می‌کند.

۱. ربات‌های خزنده و اسکرپرها

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

تشخیص: پرتکرارترین User-Agentها را در لاگ Nginx ببینید:

awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -15

راه‌حل: ربات‌های مفید (مثل Googlebot) را نگه دارید و برای بقیه در فایل robots.txt محدودیت بگذارید. ربات‌هایی که به robots.txt احترام نمی‌گذارند را با قانون Nginx یا فایروال CDN مسدود کنید. محدودیت نرخ (Rate Limiting) هم جلوی خزیدن تهاجمی را می‌گیرد.

گاهی سایت یا انجمنی تصویر یا فایل شما را مستقیم با آدرس سرور شما در صفحهٔ خودش نمایش می‌دهد. هر بازدید از آن صفحه، از ترافیک شما مصرف می‌کند.

تشخیص: در لاگ، درخواست‌های فایل‌های تصویری را با هدر Referer دامنه‌های دیگر پیدا کنید.

راه‌حل: در Nginx با دستور valid_referers فقط دامنه‌های خودتان را مجاز کنید. بسیاری از CDNها هم گزینهٔ «محافظت از Hotlink» دارند.

۳. بازدید واقعی ناگهانی

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

تشخیص: آمار بازدید سایت (Google Analytics یا ابزار مشابه) هم افزایش را نشان می‌دهد و Referer درخواست‌ها شبکه‌های اجتماعی یا سایت‌های معتبر است.

راه‌حل: این ترافیک ارزشمند است؛ مسدودش نکنید. با CDN فایل‌های ثابت را از دوش سرور بردارید و تصاویر صفحهٔ پربازدید را فشرده کنید. محاسبهٔ اثر CDN را در کاهش هزینهٔ ترافیک با CDN ببینید.

علت‌های بی‌خطر و خطرناک
معمولاً بی‌خطر
  • بازدید واقعی ناگهانی
  • ربات موتورهای جست‌وجو
  • بکاپ و به‌روزرسانی‌ها
  • دانلود ایمیج‌ها و پکیج‌ها
در برابر
نیازمند اقدام فوری
  • Hotlink و اسکرپرهای پرمصرف
  • باگ و حلقهٔ درخواست تکراری
  • حملهٔ DDoS
  • هک شدن سرور و ارسال اسپم
شکل ۲ پیش از مسدودسازی یا ارتقای پلن، مطمئن شوید با کدام دسته روبه‌رو هستید.

۴. بکاپ یا همگام‌سازی اشتباه

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

تشخیص: افزایش در ساعت‌های مشخص (مثلاً هر شب در یک ساعت ثابت) و nethogs پروسه‌هایی مثل rsync، rclone یا اسکریپت بکاپ را نشان می‌دهد.

راه‌حل: از بکاپ افزایشی استفاده کنید؛ آموزش بکاپ با rsync را ببینید. اگر سرور بکاپ در همان شبکهٔ داخلی ارائه‌دهنده است، از آی‌پی خصوصی برای انتقال استفاده کنید.

۵. به‌روزرسانی‌ها، ایمیج‌ها و پکیج‌ها

ترافیک ورودی ممکن است با docker pull مکرر در یک پایپ‌لاین CI، به‌روزرسانی خودکار سیستم یا نصب مکرر پکیج‌ها بالا برود.

تشخیص: افزایش در ستون rx، هم‌زمان با اجرای پایپ‌لاین‌ها یا کرون‌جاب‌ها.

راه‌حل: ایمیج‌ها را کش کنید، فقط هنگام تغییر نسخه pull کنید و از میرورهای نزدیک استفاده کنید. اگر ارائه‌دهندهٔ شما فقط خروجی را حساب می‌کند، ترافیک ورودی هزینه‌ای ندارد؛ تفاوت را در ترافیک ورودی و خروجی ببینید.

۶. باگ در برنامه

حلقه‌ای که بی‌وقفه یک API را صدا می‌زند، اپلیکیشن موبایلی که به‌خاطر خطا مدام درخواست تکراری می‌فرستد یا وب‌هوکی که در صورت خطا بی‌پایان تکرار می‌شود، همه می‌توانند ترافیک را به‌طور غیرمنتظره بالا ببرند.

تشخیص: در لاگ دسترسی، تعداد بسیار زیادی درخواست به یک آدرس API ثابت دیده می‌شود:

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

راه‌حل: باگ را رفع کنید، برای درخواست‌های تکراری عقب‌نشینی نمایی (Exponential Backoff) بگذارید و برای API محدودیت نرخ تعریف کنید.

۷. حملهٔ DDoS

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

تشخیص: ss -s تعداد اتصال‌ها را نشان می‌دهد و در لاگ، الگوهای تکراری از آی‌پی‌های پراکنده دیده می‌شود.

راه‌حل: سایت را پشت CDN ببرید و آی‌پی اصلی را پنهان کنید. راهنمای کامل در حمله DDoS و CDN.

۸. هک شدن سرور

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

تشخیص: nethogs پروسه‌ای ناشناس یا با نام عجیب نشان می‌دهد؛ iftop اتصال‌هایی به پورت 25 (ایمیل) یا مقصدهای متعدد نشان می‌دهد.

راه‌حل: فوراً ترافیک خروجی مشکوک را قطع کنید و مراحل نشانه‌های هک شدن سرور و اقدامات فوری را دنبال کنید.

root@server: ~
$ vnstat -h | tail -5 ... hourly rx / tx ...$ awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -3   ... Mozilla/5.0 (compatible; ExampleBot/1.0)$ awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -3   ... /api/v1/sync$ 
شکل ۳ بررسی ساعت شروع، پرتکرارترین User-Agentها و آدرس‌ها، سریع‌ترین مسیر به علت افزایش ترافیک است.

پیشگیری: هشدار پیش از غافلگیری

بهترین زمان کشف افزایش ترافیک، همان روز اول است، نه پایان ماه. vnStat را روی همهٔ سرورها نصب کنید و با یک اسکریپت ساده و کرون‌جاب، هنگام عبور مصرف روزانه یا ماهانه از حد مشخص هشدار بگیرید. اگر از سرور ساعتی با محاسبهٔ ترافیک استفاده می‌کنید، موجودی کیف پول را هم زیر نظر داشته باشید تا مصرف غیرعادی، سرور را متوقف نکند. در سرور ابری ایران کلودیفای، ترافیک دانلود هر چند دقیقه یک بار محاسبه و از کیف پول کسر می‌شود و هشدار کم بودن موجودی هم ارسال می‌شود.

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

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

مستندسازی و یادگیری از هر رخداد

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

سؤالات متداول

چطور بفهمم افزایش ترافیک از ربات‌هاست یا کاربران واقعی؟

User-Agent و آی‌پی درخواست‌ها را در لاگ Nginx بررسی کنید و با آمار بازدید سایت مقایسه کنید. اگر لاگ افزایش زیادی نشان می‌دهد اما ابزار آمار بازدید تغییری نشان نمی‌دهد، احتمالاً ربات‌ها مسئول‌اند.

آیا مسدود کردن ربات‌ها روی سئو اثر منفی دارد؟

اگر ربات موتورهای جست‌وجوی اصلی مثل Googlebot را مسدود نکنید، خیر. ربات‌های ابزارهای سئوی تجاری و اسکرپرها را می‌توانید بدون آسیب به رتبه محدود کنید.

ترافیک ورودی سرورم خیلی بالاست؛ نگران باشم؟

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

در Nginx با valid_referers فقط دامنه‌های خودتان را برای فایل‌های تصویری و دانلودی مجاز کنید یا گزینهٔ محافظت از Hotlink را در CDN فعال کنید.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.