مدیریت درخواستها در Nginx با ماژول ngx_http_limit_req_module
سلام دوستان! امروز میخواهیم درباره یکی از ویژگیهای Nginx صحبت کنیم که به ما در مدیریت ترافیک وبسایتهایمان کمک میکند. این ویژگی به نام ngx_http_limit_req_module
شناخته میشود. این ماژول به ما این امکان را میدهد که بتوانیم درخواستهای ورودی را محدود کنیم و از این طریق جلوی حملات DDOS یا هر نوع ترافیک غیرعادی را بگیریم.
وقتی که ترافیک زیادی به سمت سرور ما میآید، ممکن است سرور نتواند به خوبی پاسخ دهد و این باعث کاهش کیفیت سرویس شود. با استفاده از limit_req
، میتوانیم تعداد درخواستهایی که یک کاربر یا آیپی در یک بازه زمانی مشخص میتواند ارسال کند را محدود کنیم. این کار به ما کمک میکند تا مانند سایتی با ترافیک سنگین، احساس نکنیم که سرور تحت فشار است.
ماژول ngx_http_limit_req_module
چندین پارامتر را ارائه میدهد که میتوانیم آنها را تنظیم کنیم. یکی از این پارامترها limit_req_status
است. این پارامتر به ما اجازه میدهد تا به کد وضعیت خاصی در پاسخ به درخواستهایی که بیشتر از حد مجاز هستند، برگردیم. در اینجا، میتوانیم به راحتی ببینیم که چه تعداد درخواست رد شده و چرا.
حالا بیایید ببینیم چطور میتوانیم این قابلیت را فعال کنیم و کدی که نیاز داریم را بنویسیم. در مثال زیر کد تنظیمات Nginx را بررسی میکنیم.
http {
# تنظیمات محدوده درخواست
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
listen 80;
server_name example.com;
location / {
limit_req zone=mylimit burst=5 nodelay;
limit_req_status 503;
# محتوای دیگر
}
}
}
تحلیل کد
حالا بیایید کد را خط به خط بشکافیم:
1. تعریف محدوده درخواست:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
در این خط، ما یک محدوده جدید به نام
mylimit
ایجاد میکنیم که 10 مگابایت حافظه را به خود اختصاص میدهد و میگوید که حداقل یک درخواست در هر ثانیه مجاز است.
2. تعریف سرور:
server {
این خط شروع بلوک سرور است که تنظمیات مربوط به یک سرور خاص را در اینجا تعریف میکنیم.
3. گوش دادن به پورتی خاص:
listen 80;
در اینجا، سرور بر روی پورت 80 گوش میدهد.
4. محدود کردن درخواستها:
limit_req zone=mylimit burst=5 nodelay;
در این قسمت، ما مقدار
burst
را 5 تعیین کردهایم، به این معنی که در صورت نياز، میتوانیم 5 درخواست اضافی را با Delay صفر (بدون تاخیر) نتوانیم ساده قبول کنیم.
5. تعیین وضعیت پاسخ:
limit_req_status 503;
در اینجا مشخص میکنیم که اگر تعداد درخواستها از حد مجاز فراتر رفت، سرور پاسخ با کد وضعیت 503 بدهد.