दर सीमित करना एक रणनीति है जिसका उपयोग आप नेटवर्क पर यातायात को नियंत्रित करने के लिए कर सकते हैं। यह उन अनुरोधों की संख्या को सीमित करता है जो एक उपयोगकर्ता एक विशिष्ट समय सीमा के भीतर कर सकता है।
विभिन्न दर सीमित करने वाले एल्गोरिदम मौजूद हैं, जिनमें से प्रत्येक का अपना ट्रेड-ऑफ है। अनुरोधों के आईपी पते को ट्रैक करना और अनुरोधों के बीच कितना समय व्यतीत होता है, इसकी जांच करना एक सरल और लोकप्रिय तरीका है। सिस्टम तब अनुरोध को अस्वीकार कर सकता है यदि उसका आईपी पता सीमा की अनुमति के अनुरोधों की संख्या से अधिक है।
NodeJS-Express ऐप में रेट लिमिटिंग के लिए यह दृष्टिकोण बनाना आसान है, बस कुछ ही चरणों के साथ।
चरण 1: एक विकास वातावरण स्थापित करना
सबसे पहले, आपको एक एक्सप्रेस एप्लिकेशन बनाना और प्रारंभ करना होगा।
प्रोजेक्ट निर्देशिका बनाकर प्रारंभ करें:
एमकेडीआईआर एक्सप्रेस-एपीपी
फिर उस निर्देशिका को चलाकर दर्ज करें:
सीडी एक्सप्रेस ऐप
अगला, प्रारंभ करें npm, नोड पैकेज मैनेजर, और एक बनाएं पैकेज.जेसन चलाकर अपने आवेदन में फ़ाइल करें:
npm init -y
-यो झंडा बना देगा तुम्हारा पैकेज.जेसन सभी डिफ़ॉल्ट सेटिंग्स के साथ फ़ाइल।
इसके बाद, आपको कुछ निर्भरताएँ स्थापित करने की आवश्यकता होगी। इस ट्यूटोरियल के लिए आवश्यक निर्भरताएँ हैं:
- एक्सप्रेसजेएस: एक्सप्रेसजेएस एक नोडजेएस ढांचा है जो वेब और मोबाइल एप्लिकेशन के लिए सुविधाओं का एक मजबूत सेट प्रदान करता है। यह NodeJS के साथ बैकएंड अनुप्रयोगों के निर्माण की प्रक्रिया को सरल करता है।
- एक्सप्रेस दर सीमा: एक्सप्रेस दर सीमा एक्सप्रेसजेएस के लिए दर-सीमित मिडलवेयर है। यह सार्वजनिक एपीआई और/या एंडपॉइंट, जैसे पासवर्ड रीसेट, उपयोगकर्ता लॉगिन, आदि के लिए बार-बार अनुरोधों को सीमित करता है।
चलाकर आवश्यक निर्भरताएँ स्थापित करें:
NPM इंस्टॉल एक्सप्रेस एक्सप्रेस-दर-सीमा
चरण 2: एक एक्सप्रेस एप्लिकेशन बनाना
आपको एक मूल एक्सप्रेस सर्वर बनाना होगा जो आपके आवेदन के लिए किए जा रहे अनुरोधों को सुनता है।
सबसे पहले, एक बनाएं index.js अपने प्रोजेक्ट की रूट डायरेक्टरी में फाइल करें। यह आपके आवेदन के लिए प्रवेश फ़ाइल होगी।
इसके बाद, निम्नलिखित कोड को अपने में जोड़ें index.js फ़ाइल:
// index.js
स्थिरांक एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
स्थिरांक ऐप = एक्सप्रेस ();
स्थिरांक पोर्ट = प्रक्रिया.env. पोर्ट || 3000
app.listen (पोर्ट, () => {
सांत्वना देना।लकड़ी का लट्ठा('पोर्ट पर चल रहा ऐप' ${पोर्ट}`);
});
यह कोड आयात करता है अभिव्यक्त करना और एक्सप्रेस () को कॉल करके और इसके रिटर्न वैल्यू को स्टोर करके एक एक्सप्रेस एप्लिकेशन बनाता है अनुप्रयोग चर। यह तब पोर्ट. पर यातायात के लिए सुनता है 3000 कॉल करके सुनना पर विधि अनुप्रयोग वस्तु।
चरण 3: रूट हैंडलर बनाना
इसके बाद, कुछ रूट हैंडलर बनाएं जिन पर आप दर-सीमित समाधान लागू कर सकते हैं।
सबसे पहले, अपने प्रोजेक्ट की रूट डायरेक्टरी में एक फोल्डर, रूट बनाएं:
एमकेडीआईआर मार्ग
एक फ़ाइल बनाएँ, मार्ग.जेएस, अपने मार्ग फ़ोल्डर के अंदर और निम्नलिखित कोड जोड़ें:
स्थिरांक एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
स्थिरांक राउटर = एक्सप्रेस। राउटर ();राउटर.गेट ("/", (req, res) => {
फिर से भेजें ({संदेश: "नमस्कार, यह एक GET अनुरोध है" });
});राउटर पोस्ट ("/add-demo", (req, res) => {
res.status (201)। भेजें ({ संदेश: "संसाधन सफलतापूर्वक बनाया गया" });
});राउटर.पुट("/update-demo", (req, res) => {
res.status (201)। भेजें ({ संदेश: "संसाधन सफलतापूर्वक अपडेट किया गया" });
});
मापांक.निर्यात = राउटर;
यह कोड आयात करता है अभिव्यक्त करना, कॉल करता है रूटर विधि चालू अभिव्यक्त करना, और मान को एक चर में संग्रहीत करता है, रूटर. रूटर विधि आपको मॉड्यूलर, माउंट करने योग्य रूट हैंडलर बनाने देती है। आप a. के लिए रूट हैंडलर बना सकते हैं प्राप्त का अनुरोध "/", एक पद का अनुरोध "/add-demo”, और ए रखना का अनुरोध "/update-demo”. अंत में, निर्यात करें रूटर चर।
अगला, आयात करें रूटर आपके में परिवर्तनशील index.js फ़ाइल:
// index.js
स्थिरांक मार्ग = ज़रूरत होना("./मार्ग/मार्ग");
फिर, इसे अपनी index.js फ़ाइल में मिडलवेयर के रूप में उपयोग करें:
// index.js
अनुप्रयोग।उपयोग(मार्गों);
से पहले कोड ब्लॉक को ऊपर रखना सुनिश्चित करें ऐप.सुनो बुलाना।
चरण 4: दर सीमा को लागू करना
सबसे पहले, "एक बनाएँ"मध्यस्थअपने प्रोजेक्ट की रूट डायरेक्टरी में फ़ोल्डर चलाकर:
एमकेडीआईआर मिडलवेयर
फिर "नामक एक फ़ाइल बनाएँ"दर-सीमक.जेएसमिडलवेयर निर्देशिका के अंदर। इस फ़ाइल में निम्न कोड जोड़ें:
// दर-सीमक.जेएस
स्थिरांक रेटलिमिटर = ज़रूरत होना("एक्सप्रेस-दर-सीमा");स्थिरांक लिमिटर = रेटलिमिटर ({
अधिकतम: 5,
विंडोएमएस: 10000, // दस पल
संदेश: "तुम कर सकते हो'इस समय कोई और अनुरोध न करें। बाद में पुन: प्रयास",
});
मापांक.निर्यात = सीमक
दर सीमक फ़ंक्शन अनुरोधों की संख्या को सीमित करने के लिए शर्तों के साथ कॉन्फ़िगरेशन ऑब्जेक्ट लेता है।
उपरोक्त कॉन्फ़िगरेशन ऑब्जेक्ट में गुण हैं:
- मैक्स: यह गुण हमेशा एक होना चाहिए संख्या या एक फ़ंक्शन जो एक संख्या देता है। यह एक निर्दिष्ट समय सीमा के भीतर एक उपयोगकर्ता द्वारा किए जा सकने वाले अनुरोधों की अधिकतम संख्या का प्रतिनिधित्व करता है। यदि यह गुण कॉन्फ़िगरेशन ऑब्जेक्ट में सेट नहीं है, तो यह डिफ़ॉल्ट है 5.
- विंडोज़एमएस: यह गुण हमेशा एक संख्या होना चाहिए। यह उस समय सीमा का प्रतिनिधित्व करता है जिसमें कई अनुरोधों की अनुमति है मिलीसेकेंड. यदि यह गुण कॉन्फ़िगरेशन ऑब्जेक्ट में सेट नहीं है, तो यह 60000 मिलीसेकंड (एक मिनट) के लिए डिफ़ॉल्ट है।
- संदेश: यह संपत्ति एक हो सकती है डोरी, एक JSON ऑब्जेक्ट, या द्वारा समर्थित कोई अन्य मान एक्सप्रेस की प्रतिक्रिया.भेजें तरीका। यदि यह गुण कॉन्फ़िगरेशन ऑब्जेक्ट में सेट नहीं है, तो यह डिफ़ॉल्ट रूप से "बहुत अधिक अनुरोध करता है। बाद में पुन: प्रयास करें।"
फ़ंक्शन तब आपके आवेदन के लिए बार-बार अनुरोधों की जांच करेगा। यदि कोई उपयोगकर्ता सीमा से अधिक है (मैक्स, 5) समय सीमा के भीतर (विंडोएमएस, 10s), यह अनुरोध को अवरुद्ध कर देगा। यह स्थिति कोड के साथ "बहुत अधिक अनुरोध" त्रुटि भी देगा 429.
अंत में, अपने में सीमक फ़ंक्शन आयात करें index.js फ़ाइल और इसे अपने आवेदन में वैश्विक मिडलवेयर के रूप में लागू करें। इसे रखकर करें app.use (सीमक) मार्गों के ऊपर मिडलवेयर। यह आपके आवेदन के सभी मार्गों पर दर-सीमित समाधान लागू करता है।
अनुप्रयोग।उपयोग(सीमक);
दर सीमित विशिष्ट मार्ग
आप विशिष्ट मार्गों के लिए सीमित दर भी लागू कर सकते हैं। आप एक अलग समय सीमा में किए गए अनुरोधों को अस्वीकार करने, एक अलग संदेश प्रदर्शित करने आदि के लिए उन्हें अलग से कॉन्फ़िगर कर सकते हैं।
उदाहरण के लिए, मान लें कि आप अपने एप्लिकेशन में उपयोगकर्ता साइन-इन रूट लागू कर रहे हैं। आपको साइन-इन मार्ग के लिए एक दर-सीमित कॉन्फ़िगरेशन जोड़ने की आवश्यकता हो सकती है जो अन्य मार्गों द्वारा उपयोग किए गए कॉन्फ़िगरेशन से भिन्न होता है।
सबसे पहले, आपको हटाना होगा सीमक एक एप्लिकेशन-स्तरीय मिडलवेयर के रूप में और इसे लागू करें क्योंकि एक्सप्रेसजेएस में कोई अंतर्निहित मिडलवेयर फ़िल्टर सिस्टम नहीं है। इसलिए भले ही आप किसी रूट के लिए एक विशिष्ट दर-सीमित समाधान जोड़ते हैं, वैश्विक मिडलवेयर अभी भी उस मार्ग पर चलेगा।
इसके बाद, अपने में एक नया दर-सीमित कॉन्फ़िगरेशन बनाएं दर-सीमक.जेएस फ़ाइल करें और इसे निर्यात करें।
स्थिरांक साइनइनलिमिटर = रेटलिमीटर ({
अधिकतम: 3,
विंडोएमएस: 10000, //दस पल
संदेश: "बहुत अधिक साइन-इन प्रयास। बाद में पुन: प्रयास।"
})
मापांक.निर्यात = {
सीमक,
साइन इनलिमिटर
}
साइन इनलिमिटर कॉन्फ़िगरेशन ऑब्जेक्ट की एक अलग संख्या है मैक्स अनुरोध और सामान्य दर-सीमक से एक अलग त्रुटि संदेश।
अंत में, अपना अपडेट करें राउटर.जेएस नीचे दिए गए कोड ब्लॉक के साथ फाइल करें:
// राउटर.जेएस
स्थिरांक एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
स्थिरांक राउटर = एक्सप्रेस। राउटर ();
स्थिरांक {सीमक, साइनइनलिमिटर} = ज़रूरत होना("../मिडलवेयर/दर-सीमक")राउटर.गेट ("/sign-in", साइनइनलिमिटर, (req, res, next) => {
फिर से भेजें ({संदेश: "नमस्कार, यह एक GET अनुरोध है" });
});राउटर।उपयोग(सीमक)
राउटर पोस्ट ("/post", (req, res) => {
res.status (201)। भेजें ({ संदेश: "संसाधन सफलतापूर्वक बनाया गया" });
});राउटर.पुट("/put", (req, res) => {
res.status (201)। भेजें ({ संदेश: "संसाधन सफलतापूर्वक अपडेट किया गया" });
});
मापांक.निर्यात = राउटर;
उपरोक्त कोड ब्लॉक में, आपने आयात किया सीमक तथा साइन इनलिमिटर। फिर आपने आवेदन किया साइन इनलिमिटर के लिए एक विशिष्ट दर-सीमक के रूप में "/sign-in" रास्ता।
अंत में, रखकर राउटर। उपयोग (सीमक) शेष मार्गों के ऊपर, आपने शेष मार्गों के लिए दर-सीमक के रूप में लिमिटर लागू किया।
दर सीमित करने का महत्व
दर सीमित करने से आपके वेब सर्वर पर एक साथ कई अनुरोधों को संसाधित करने से बचकर तनाव कम हो जाता है। यह बॉट गतिविधि को कम करता है, आपको डेनियल ऑफ सर्विस (DoS) के हमलों से बचाता है, और क्रूर-बल के हमलों को रोकता है।