রেট সীমাবদ্ধ থাকাকালীন আমি কীভাবে 429 এইচটিপি কোডটি ফেরত দিতে এনগিনেক্স কনফিগার করব?


11

থ্রটলিং / রেট সীমাবদ্ধকরণের সময় আমি কীভাবে এনজিএনএক্সকে ডিফল্ট 503 (পরিষেবাটি উপলভ্য নয়) এর পরিবর্তে http স্থিতি কোড 429 (প্রচুর অনুরোধগুলি) ফেরত দিতে কনফিগার করব?

এফওয়াইআই, আমি এইচটিপিপ্লিমিটরেকমোডুলের সাথে বিপরীত প্রক্সি হিসাবে এনগিনেক্স ব্যবহার করছি। 429 স্থিতি কোডের খসড়াটি হ'ল আরএফসি 6585

স্ট্যাকএক্সচেঞ্জড এ এই (বন্ধ) প্রশ্নটি দেখায় যে ত্রুটি_পৃষ্ঠা নির্দেশিকা ব্যবহার করা সম্ভব । তবে, যদি সত্যিই কোনও সার্ভার সমস্যা থাকে (গ্রাহক আমাদের খুব বেশি আঘাত করেন না) এবং সার্ভারটি 503 পরিষেবাটি অনুপলব্ধ অবস্থায় ফিরে পাওয়া উচিত নয় তবে আমি একটি 429 ফিরিয়ে দিতে চাই না

কোন পরামর্শ?


এফওয়াইআই, আমি এই বৈশিষ্ট্যটির জন্য বর্ধিতকরণের অনুরোধ তৈরি করেছি কারণ সমস্ত 503 টি থেকে 429 এ ম্যাপিং করা সম্ভব নয়।
অ্যাডামব্রড

উত্তর:


19

সংস্করণ ১.৩.১৫ সহ সুসংবাদ, http://mailman.nginx.org/pipermail/nginx/2013- মার্চ/038306.html

আমাদের কাছে "সীমা_আরক_ স্ট্যাটাস" এবং "সীমা_কন_স্ট্যাটাস" নির্দেশনা রয়েছে। আমি কেবল এগুলিকে জেন্টু লিনাক্সে পরীক্ষা করেছি (নোট করুন যে আপনার মডিউলটি সীমা_আরেক এবং লিমিটেড সংকলন করা দরকার)।

এই সেটিংগুলির সাথে আমি মনে করি আপনি যা চেয়েছিলেন তা অর্জন করতে পারবেন:

limit_req_status 429;
limit_conn_status 429;

আমি একটি দ্রুত সঙ্গে এটি যাচাই করেছি:

ab2 -n 100000 -c 55 "http://127.0.0.1/api/v1

যার উপর সর্বাধিক অনুরোধটি উচ্চ অনুরোধের হার এবং এনজিএনএক্সে কনফিগার করা সীমাটির কারণে নির্দেশকে সক্রিয় করার পরে ব্যর্থ হয়েছিল:

limit_req zone=api burst=15 nodelay;

1
.. "অ্যাব 2" কি?
XXL

1
abএকটি সরঞ্জাম থেকে apache2-utils। উবুন্টুতে এটি abকিন্তু সেন্টো'র অধীনে ab2
ডাইটার

1

ভিবার্টের প্রতিক্রিয়া এবং অন্যান্য মন্তব্যের ভিত্তিতে, এটি স্পষ্ট যে সেরা বিকল্পটি হ'ল 503 ত্রুটি 429 এর মানচিত্র করা।

error_page 503 = 429 /too-many-requests.html

যেহেতু nginx (1.3.x) শুধুমাত্র 503 স্থিতি কোডগুলি সীমা_আরেক এবং সীমা_কন এর জন্য ব্যবহার করে, তাই এটি একটি সূক্ষ্ম পদ্ধতির হওয়া উচিত।


এই হল না ভাল বিকল্প। 429 একটি নির্দিষ্ট ব্যবহারের ক্ষেত্র, 429 ফেরত দেওয়ার জন্য সমস্ত সম্ভাব্য 503s (পরিষেবাটি অনুপলব্ধ) ম্যাপিং করা ব্যবহারকারীদের কাছে বিভ্রান্তিমূলক এবং অবৈধ। উদাহরণস্বরূপ, কোনও ক্লায়েন্ট একটি 429 দেখতে পাবে এবং ব্যাক-অফ পুনরায় চেষ্টা করার যুক্তি ব্যবহার করতে পারে, তবে 503 থ্রোটলিংয়ের সাথে সম্পর্কিত না হলে এটি কোনও লাভ হয় না।
এডি

0

সীমা_আরেক এবং সীমা_কোন ব্যতীত এনজিঙ্কস নিজেই কখনও 503 ফেরত দেয় না।


1
আহ, এটা আকর্ষণীয়। সুতরাং আপনি বলছেন যে যদি আমি ত্রুটি_পৃষ্ঠা ব্যবহার করে 429 দিয়ে 503 প্রতিস্থাপন করি তবে গ্রাহকরা সত্যিই খুব বেশি অনুরোধ না প্রেরণ করলে আমি কখনই খুব বেশি অনুরোধ জানাব না?
অ্যাডামব্রোড

হ্যাঁ, সত্য, তবে কেবল একটি ব্যতিক্রম ছাড়া, আপনি (proxy/factcgi/scgi/uwsgi)_intercept_errorsসক্ষম করেন নি। nginx.org/r/proxy_intercep_erferences
ভিবার্ট

এটাও সম্ভব যে, এনজিনেক্স দ্বারা পরিবেশন করা অ্যাপ্লিকেশনটি 503 ফেরত আসবে, যা ক্লায়েন্টের পক্ষে এটি দেখার পক্ষে অসুবিধা হয় যে এটি অ্যাপ্লিকেশন থেকে এনজিনেক্সের সংযোগের সীমা বা সার্ভার ত্রুটি।
বিবাজা 42
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.