خانه bread crumb arrow icon وبلاگ bread crumb arrow icon محافظت از سرور با محدود کردن درخواست‌ ها در NGINX

محافظت از سرور با محدود کردن درخواست‌ ها در NGINX

محافظت از سرور با محدود کردن درخواست‌ ها در NGINX
تیم محتوا
مدت زمان مطالعه : 8 دقیقه
0 کامنت
۱۴۰۴/۱۰/۱۶

تا حالا برات پیش اومده که یک‌ دفعه ترافیک سایتت بالا بره و سرور کم‌ کم سنگین بشه، درخواست‌ ها پشت سر هم صف بکشن و سرعت لود صفحات به شکل قابل توجهی بیاد پایین؟ خیلی وقت‌ ها این وضعیت به خاطر هجوم درخواست‌ های زیاد، ربات‌ ها، اسکریپت‌ ها یا حتی حملات عمدی مثل اتک اتفاق میوفته و اگر NGINX به درستی پیکربندی نشده باشه، هم سرور تحت فشار قرار می‌ گیره و هم تجربه‌ کاربران دچار افت کیفیت میشه.

محدود کردن تعداد درخواست اتصالات در NGINX بهت اجازه میده سرور رو از فشار زیاد محافظت کنی و ترافیک واقعی رو از مزاحم‌ ها جدا کنی. این کار ساده است و با چند دستور مثل limit_conn و limit_req میتونی جلوی مشکلات ناگهانی رو بگیری بدون اینکه کاربران واقعی دچار مشکل بشن.

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

نحوه محدود کردن تعداد درخواست اتصالات در NGINX

چرا محدود کردن درخواست‌ ها در NGINX مهمه؟

گاهی چند کاربر یا حتی یه ربات میتونن تعداد زیادی درخواست به سرور بفرستن. این موضوع باعث:

  • افزایش مصرف CPU و RAM

  • کند شدن سایت

  • ایجاد صف درخواست‌ ها

  • حتی Down شدن سرویس

با Rate Limit و Connection Limit میتونی:

  • ترافیک واقعی رو از ترافیک مشکوک جدا کنی

  • منابع رو بهینه استفاده کنی

  • پایداری سرور رو بالا ببری

  • جلوی حملات ساده DoS رو بگیری

نکته مهم: آدرس‌ های IP ممکنه پشت NAT مشترک باشن، پس محدودسازی IP باید با دقت انجام بشه.

محدود کردن تعداد اتصال‌ ها (limit_conn)

برای محدود کردن تعداد اتصال‌ های همزمان، اول باید یک Shared Memory Zone تعریف کنیم:

limit_conn_zone $binary_remote_addr zone=addr:10m;

بعد محدودیت رو روی یک مسیر، سرور یا کل کانفیگ اعمال می‌ کنیم:

location /download/ { limit_conn addr 1; }

در اینجا هر IP فقط یک اتصال همزمان میتونه داشته باشه.

نمونه محدودسازی بر اساس نام سرور:

http { limit_conn_zone $server_name zone=servers:10m; server { limit_conn servers 1000; } }

محدود کردن نرخ درخواست‌ ها (limit_req)

این روش برای جلوگیری از ترافیک Burst، فشار روی Backend و  حملات ساده DDoS استفاده میشه.

اول Bucket Zone رو تعریف می‌ کنیم:

http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; }

حالا محدودیت رو اعمال می‌ کنیم:

location /search/ { limit_req zone=one; }

یعنی هر IP فقط 1 درخواست در ثانیه ارسال کنه.

حالت Dry-Run (برای تست بدون اعمال محدودیت)

location /search/ { limit_req zone=one; limit_req_dry_run on; }

در این حالت فقط لاگ ثبت میشه و هیچ درخواستی بلاک نمیشه.

مدیریت درخواست‌ های اضافی (burst و delay)

صف کردن درخواست‌ ها

limit_req zone=one burst=5;

5 درخواست اضافه وارد صف میشن و به تدریج پردازش میشن.

پردازش فوری بدون تأخیر

limit_req zone=one burst=5 nodelay;

درخواست‌ های اضافه تا سقف burst فوری اجرا میشن.

پردازش ترکیبی (بخشی فوری، بخشی با تأخیر)

limit_req zone=one burst=5 delay=3;

3 تا درخواست سریع -> 2 تا با تاخیر -> بقیه بلاک میشن.

محدود کردن سرعت دانلود (limit_rate)

location /download/ { limit_rate 50k; }

برای کنترل بهتر همراه با محدودیت اتصال:

location /download/ { limit_conn addr 1; limit_rate 50k; }

اعمال محدودیت بعد از مقدار مشخص داده

limit_rate_after 500k; limit_rate 20k;

ترکیب محدودیت اتصال + سرعت دانلود

http { limit_conn_zone $binary_remote_address zone=addr:10m; server { limit_conn addr 5; location /download/ { limit_conn addr 1; limit_rate_after 1m; limit_rate 50k; } } }

کنترل دینامیک سرعت بر اساس TLS Version

map $ssl_protocol $response_rate { "TLSv1.1" 10k; "TLSv1.2" 100k; "TLSv1.3" 1000k; } location / { limit_rate $response_rate; }

سخن آخر

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

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

این پست را به اشتراک بگذارید
سوالات متداول محدود کردن تعداد درخواست اتصالات در NGINX

اگر درست تنظیم شود، خیر . فقط ترافیک غیرعادی یا مشکوک را محدود می‌ کند.

کمک می‌ کند، اما برای امنیت کامل باید در کنار ابزارها و لایه‌ های حفاظتی دیگر استفاده شود.

0

دیدگاه و پرسش