NGINX - दुरुपयोग को रोकने के लिए गला घोंटना अनुरोध


28

ऐसा करने का कारण यह है कि उपयोगकर्ता जावास्क्रिप्ट के साथ हमारे एपीआई के खिलाफ विकसित होते हैं, और कुछ डेवलपर्स स्क्रू करते हैं और आगंतुकों को AJAX अनुरोधों के साथ सर्वर को स्लैम करने का कारण बनाते हैं। जब ऐसा होता है, तो मैं शायद एपीआई अनुरोधों को प्रति मिनट 50 अनुरोधों , या उस प्रभाव के लिए कुछ करने में सक्षम होना चाहता हूं ।

नोट: (विशेष रूप से डीबी गहन संसाधन, इसलिए शायद सर्वर-वाइड (उदाहरण के लिए थ्रॉटल "/ json_api /" के बजाय एक पथ स्तर पर, लेकिन "/ स्थिर /") नहीं।

जवाबों:


36

यह Ninex के साथ LimitReqModule का उपयोग करके किया जा सकता है । हालाँकि यदि यह रिवर्स प्रॉक्सी के लिए है तो आप HAProxy द्वारा समर्थित नई दर को सीमित करने की कोशिश कर सकते हैं ।

मैंने पाया कि नगीनक्स रेट को आप चाहते हैं कि सटीक दर प्राप्त करने के लिए थोड़ा भ्रमित हो।

लेकिन आपके पास मूल रूप से कुछ ऐसा है:

limit_req_zone  $binary_remote_addr  zone=default:10m   rate=50r/m;

में httpखंड और में निम्नलिखित की तरह फिर कुछ locationभीतर अनुभाग serverअनुभाग:

limit_req zone=default burst=10 nodelay;

आदेश में यह आप के लिए एक निश्चित खंड के लिए नहीं करने के लिए /staticबस एक अलग है locationऔर यह limit_reqनिर्देश (या उलटा) शामिल नहीं होगा।


धन्यवाद। क्या आप बता सकते हैं कि वे चीजें क्या कर रही हैं (जोन, फट, नोडेल)? और, क्या आपके कहने का मतलब है zone=limit_req_zone?
orokusaki

ईमानदारी से, मैं उन्हें अच्छी तरह से समझा नहीं सकता कि ऐसा क्यों है कि मुझे लगता है कि यह सिर्फ भ्रमित करने के लिए है। लिंक में माइकल का स्पष्टीकरण मुझे लगता है कि यह संभव हो सकता है। मुझे विश्वास नहीं होता कि मेरे पास कोई टाइपो है जहाँ तक आपका दूसरा सवाल है ... मैंने जो मॉड्यूल प्रलेखन लिंक किया है, उसमें एक उदाहरण है जो मदद कर सकता है।
काइल ब्रांट

2
ज़ोन, बर्स्ट और नोडेलय को रेटिनिंग मॉड्यूल के बारे में Nginx विकी पृष्ठ पर प्रलेखित किया गया है , जो पहले से ही ऊपर दिए गए उत्तर से जुड़ा हुआ है।
मार्क स्टोसबर्ग

काइल, क्या आप जानते हैं कि किसी अन्य ट्रिगर (जैसे प्राधिकरण-हेडर) के साथ प्रति स्थान दर सीमा को संयोजित करने का कोई तरीका है। मेरे मामले में मैं एक विशिष्ट उपयोगकर्ता की दर को कम कर सकता हूं।
निल्स

1
@ नील आप $http_authorizationएक नए क्षेत्र को परिभाषित करने के लिए चर का उपयोग कर सकते हैं, जहां कुंजी आईपी पते के बजाय ऐसे हेडर है limit_req_zone $http_authorization zone = per_user : 10m rate = 5r/s, और फिर per_userउस स्थान का उपयोग करें जहां आप प्रति उपयोगकर्ता दर सीमित करना चाहते हैं। अनटाइटेड, मैंने केवल डॉक्यूमेंटेशन और नग्नेक्स वेरिएबल्स की सूची पढ़ी ... मुझे पता है कि क्या आप इसे आज़माते हैं!
idrarig
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.