nginx - ক্লায়েন্টের অনুরোধের বডিটি একটি অস্থায়ী ফাইলে বাফার হয়েছে


48

আমি যখনই বড় ফাইল আপলোড করার চেষ্টা করি তখন আমার লগ ফাইলগুলিতে নিম্নলিখিত ত্রুটিটি পাই get

a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001

ফাইলটি সফলভাবে আপলোড হলেও আমি সর্বদা উপরের ত্রুটিটি পাই।

আমি বেড়ে client_body_buffer_sizeকরতে 1000mযা আমি বৃহত্তম ফাইল হতে আপলোড কি আশা। যাইহোক, এটি কেবল অনুমান ছিল এবং যদিও আমি ত্রুটিটি আর পাই না তবে আমি ভাবছি যে এটির জন্য একটি উপযুক্ত মান কিনা client_body_buffer_size?

যদি কেউ এই নির্দেশনা এবং এটি কীভাবে ব্যবহার করা উচিত সে সম্পর্কে কিছু আলোকপাত করতে পারে তবে আমি এটির প্রশংসা করব।


2
আমার কাছে এটি সফলভাবে আপলোড করা হয়নি।
বেন

উত্তর:


51

এটি একটি সতর্কতা, ত্রুটি নয়। সে কারণেই লগতে এটি উপস্থাপন করা হয়েছিল [warn]

এর অর্থ এই যে আপলোড হওয়া ফাইলটির আকার আপলোডগুলির জন্য সংরক্ষিত ইন-মেমরি বাফারের চেয়ে বড় ছিল।

নির্দেশটি client_body_buffer_sizeসেই বাফারের আকারকে নিয়ন্ত্রণ করে।

আপনি যদি মাঝে মাঝে মাঝে মাঝে ফাইল আপলোডের জন্য 1 গিগাবাইট র‌্যাম রাখতে সক্ষম হন তবে তা ঠিক আছে। ডিস্কের অস্থায়ী ফাইলের চেয়ে র‌্যামে আপলোডটি বাফার করার জন্য এটি একটি পারফরম্যান্স অপটিমাইজেশন though যদি আপনার বেশিরভাগ আপলোড ছোট হয় তবে এটি সম্ভবত অপচয় waste

শেষ পর্যন্ত, উপযুক্ত আকারটি কী তা কেবলমাত্র আপনি সিদ্ধান্ত নিতে পারেন।


5
আপনার উত্তর আমাকে সিদ্ধান্ত নিতে সাহায্য করেছে। আমি মানটি প্রায় 512k থেকে 1m তে নামিয়ে দেব। এটা আমি খুব লজ্জাজনক যে আমি এই সাবধানবাণীগুলি অনেক পেয়ে যাব।
Abs

ভার্চুয়াল মেমোরির কারণে, একটি বড় মান ব্যবহার করা "মাঝে মাঝে ফাইল আপলোডের জন্য সর্বদা 1 জিবি র‌্যামে রক্ষিত হয় না"। (বর্তমান আপলোডের জন্য এটির প্রয়োজনের চেয়ে বেশি আর কোনও র্যাম ব্যবহার করা হবে না))
কিরিল বুলিগিন

1
যদি আমি এটি 50MB তে সেট করে রেখেছি এবং 200 জন লোক একই তাত্ক্ষণিক সময়ে একটি পৃষ্ঠা দেখতে পেয়েছি, তবে তা কি 10 গিগাবাইট মেমরি গ্রহণ করবে, বা কেবল ফাইল আপলোড সম্পাদনকারী কোনও ব্যবহারকারীদের জন্য 50MB বরাদ্দ থাকবে?
কোডমনকি

@ কোডমনকি এই বাফারটি তখনই ব্যবহৃত হবে যখন কোনও অনুরোধের বডি আপলোড করা হয়। আপলোড সম্পূর্ণ হয়ে গেলে মেমরিটি অন্য একটি অনুরোধের জন্য বিনামূল্যে ব্যবহার করা যায়। এবং অন্য মন্তব্যকারী যেমন উল্লেখ করেছেন, যখন একটি আপলোড প্রগতিতে নেই, কোনও মেমরি ব্যবহৃত হয় না। সুতরাং এটি কোনও নির্দিষ্ট তাত্ক্ষণিক সময়ে কতগুলি যুগপত আপলোড চলছে তার উপর নির্ভর করে।
মাইকেল হ্যাম্পটন

প্রায়শই দশ, সম্ভবত কখনও 20 এর বেশি নয় 12 128 জিবি বক্স তাই আমার প্রচুর স্মৃতি আছে ..! সত্য যদিও, আমি আমার ত্রুটি লগের সেই [সতর্কতা] লাইনগুলি থেকে মুক্তি পাওয়ার জন্য এটি করছিলাম - আমার সম্ভবত তাদের এড়ানো উচিত!
কোডমনকি

17

আপনি যদি অস্থায়ী ফাইলে দেহের সামগ্রীগুলি এনগিনএক্সে না রাখতে চান তবে আপনি নিজের কনফিগার সেট করতে পারেন। এটার মত:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

আপনি যদি এই কনফিগারেশন দুটি একই ম্যাক্সে সেট করেন। আকার (কেবি, এমবি বা জিবি জন্য যথাক্রমে কে, এম বা জি), আপনি প্রতিরোধ করবেন যে এনগিনএক্স একটি অস্থিরতা তৈরি করে। ফাইল।

আরও তথ্যের জন্য: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size এবং http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


8
তবে সেই কনফিগারেশনের সাহায্যে আপনি 10 এমআইবি
জোসেফ

@Josef: কোনো প্রতিরোধ কোনো উপায়ে। এটি কেবলমাত্র যে অনুরোধটি ডিস্কে বাফার করা দরকার এবং আপনি সতর্কতা পাবেন। গৃহীত উত্তর চেক করুন।
ওমরথম্যান

9
ওমর ওথম্যান, জোসেফ client_max_body_sizeপ্যারামিটারের কারণে সঠিক । এই লিঙ্কটিতে তথ্যটি দেখুন: ক্লায়েন্ট_ম্যাক্স_বডি_সাইজ ডক। : Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size.
eddy85br
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.