nginx - क्लाइंट रिक्वेस्ट बॉडी को एक अस्थायी फ़ाइल में बफर किया जाता है


48

जब भी मैं एक बड़ी फ़ाइल अपलोड करने का प्रयास करता हूं, मुझे हर बार मेरी लॉग फ़ाइलों में निम्न त्रुटि मिलती है।

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उस बफ़र के आकार को नियंत्रित करता है।

यदि आप कभी-कभार फ़ाइल अपलोड के लिए 1GB RAM रख सकते हैं, तो यह ठीक है। यह डिस्क पर एक अस्थायी फ़ाइल के बजाय रैम में अपलोड को बफर करने के लिए एक प्रदर्शन अनुकूलन है, हालांकि इस तरह के बड़े अपलोड के साथ अतिरिक्त सेकंड के एक जोड़े को शायद ज्यादा मायने नहीं रखता है। यदि आपके अधिकांश अपलोड छोटे हैं, तो यह संभवतः एक बेकार है।

अंत में, केवल आप वास्तव में निर्णय ले सकते हैं कि उपयुक्त आकार क्या है।


5
आपके जवाब से मुझे निर्णय लेने में मदद मिली। मैं मान को लगभग 512k से 1m तक कम करूँगा। यह शर्म की बात है कि मुझे इनमें से बहुत सी चेतावनियाँ मिलेंगी।
पेट

की वजह से आभासी स्मृति , एक बड़े मूल्य का उपयोग करने के लिए "राम के 1GB हमेशा सामयिक फाइल अपलोड के लिए आरक्षित" नेतृत्व नहीं करेंगे। (वर्तमान अपलोड के लिए वास्तव में इसकी आवश्यकता से अधिक रैम का उपयोग नहीं किया जाएगा।)
किरिल ब्यूलगिन

1
अगर मैं इसे 50MB पर सेट करता हूं और 200 लोगों को एक ही पल में एक पेज दिखाई देता है, तो क्या यह 10GB मेमोरी लेगा, या केवल 50MB किसी फ़ाइल अपलोड करने वाले उपयोगकर्ताओं के लिए आवंटित किया जाएगा?
कोडमेकिन सेप

@Codemonkey यह बफर केवल तभी उपयोग किया जाता है जब एक अनुरोध निकाय अपलोड किया जा रहा हो। एक बार अपलोड पूरा होने के बाद मेमोरी दूसरे अनुरोध के लिए इस्तेमाल होने के लिए स्वतंत्र है। और जैसा कि दूसरे टिप्पणीकार ने बताया है, जबकि एक अपलोड प्रगति पर नहीं है, कोई मेमोरी का उपयोग नहीं किया जाता है। तो यह इस बात पर निर्भर करता है कि आपके द्वारा दिए गए कितने युगपत अपलोड किसी भी पल में चल रहे हैं।
माइकल हैम्पटन

अक्सर दस, शायद 20 से अधिक कभी नहीं। 128 जीबी बॉक्स तो मेरे पास बहुत मेमोरी है ..! ईमानदारी से, मैं अपनी त्रुटि लॉग में उन [चेतावनी] लाइनों से छुटकारा पाने के लिए यह कर रहा हूँ - मुझे शायद बस उन्हें अनदेखा करना चाहिए!
कोडमेकिन

17

यदि आप NginX को अस्थायी फ़ाइल में शरीर की सामग्री संग्रहीत नहीं करना चाहते हैं, तो आप अपना कॉन्फ़िगरेशन सेट कर सकते हैं। इस तरह:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

यदि आप यह दोनों विन्यास एक ही अधिकतम पर सेट करते हैं। आकार (k, M या G में kB, MB या GB, क्रमशः) के लिए, आप रोकेंगे कि NginX एक अस्थायी बनाता है। फ़ाइल।

अधिक जानकारी के लिए: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size और http://nginx.org/en/docs/ngtt/ngx_http_core_module.html#client_max_body_size


8
लेकिन उस कॉन्फिग के साथ आप उन सभी अपलोड को भी रोक पाएंगे जो 10 MiB से बड़े हैं
जोसेफ

@ जोसेफ: किसी भी तरह से रोकथाम नहीं । यह सिर्फ इतना है कि अनुरोध को डिस्क पर बफ़र करने की आवश्यकता होगी, और आपको चेतावनी मिलेगी। स्वीकृत उत्तर की जाँच करें।
उमरमनमैन

9
@OmarOthman, जोसफ client_max_body_sizeपैरामीटर के कारण सही है । इस लिंक पर जानकारी देखें: client_max_body_size doc। : 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.