এনজিআইএনএক্স - অপব্যবহার রোধ করার জন্য থ্রোটল অনুরোধ


28

আমি এটি করতে চাই কারণ হ'ল ব্যবহারকারীরা জাভাস্ক্রিপ্ট সহ আমাদের এপিআইয়ের বিপরীতে বিকাশ করে এবং কিছু বিকাশকারীরা স্ক্রু তৈরি করে এবং এজেএক্স অনুরোধের সাথে দর্শকদের সার্ভারে স্ল্যাম দেয়। যখন এটি হয়, আমি API অনুরোধগুলি সম্ভবত প্রতি মিনিটে 50 টি অনুরোধে বা সেইরকম কিছুতে থ্রটল করতে সক্ষম হতে চাই ।

দ্রষ্টব্য: (বিশেষত ডিবি নিবিড় সংস্থানগুলি, তাই সম্ভবত সার্ভার-প্রশস্তের চেয়ে কোনও পাথ স্তরে (উদাঃ থ্রোটল "/ json_api /" তবে "/ স্ট্যাটিক /" নয়)।

উত্তর:


36

এই ব্যবহার করা যেতে পারে LimitReqModule nginx সঙ্গে। তবে এটি যদি কোনও বিপরীত প্রক্সিটির জন্য হয় তবে আপনি 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

সত্যিই আমি তাদের এটিকে ভালভাবে ব্যাখ্যা করতে পারি না, এ কারণেই আমি মনে করি এটি কেবল বিভ্রান্তিকর। আমি যে লিঙ্কটি দিয়েছি তাতে মাইকের ব্যাখ্যাটি সম্ভবত কার্যকর হতে পারে sounds আমি বিশ্বাস করি না যে আপনার দ্বিতীয় প্রশ্ন যতটা যায় আমার কাছে কোনও টাইপস আছে ... আমি যে মডিউল ডকুমেন্টেশনের সাথে লিঙ্ক করেছি তার একটি উদাহরণ রয়েছে যা সাহায্য করতে পারে।
কাইল ব্র্যান্ড্ট

2
জোন, বিস্ফোরণ এবং নোডলে উপরের উত্তর থেকে ইতিমধ্যে সংযুক্ত রেট সীমাবদ্ধ মডিউল সম্পর্কে Nginx উইকি পৃষ্ঠায় নথিভুক্ত করা হয়েছে ।
মার্ক স্টোসবার্গ

কাইল, আপনি কি জানেন যে যদি কোনও ট্রিগার (উদাহরণস্বরূপ অনুমোদন-শিরোনাম) এর সাথে প্রতি স্থানের হারের সীমা একত্রিত করার কোনও উপায় আছে কিনা। আমার ক্ষেত্রে আমি একটি নির্দিষ্ট ব্যবহারকারীর রেট থ্রোটল করতে চাই।
নীল

1
@ নীল আফিক্স আপনি $http_authorizationনতুন জোনটি সংজ্ঞায়িত করতে ভেরিয়েবলটি ব্যবহার করতে পারেন যেখানে আইপি ঠিকানার চেয়ে চাবিটি এমন শিরোনাম, অর্থাত্‍ limit_req_zone $http_authorization zone = per_user : 10m rate = 5r/s, এবং তারপরে per_userঅবস্থানের বিভাগগুলিতে যেখানে আপনি প্রতি ব্যবহারকারী হার সীমাবদ্ধ করতে চান সেখানে অঞ্চলটি ব্যবহার করতে পারেন। অনির্ধারিত, আমি কেবলমাত্র ডকুমেন্টেশন এবং এনজিনেক্স ভেরিয়েবলের তালিকাটি পড়ি ... আপনি যদি এটি চেষ্টা করে থাকেন তবে আমাকে জানান!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.