nginx - client_max_body_size का कोई प्रभाव नहीं है


205

नेग्नेक्स कहता रहता है client intended to send too large body। Googling और RTM ने मुझे इशारा किया client_max_body_size। मैं इसे में सेट करने 200mके nginx.confसाथ ही vhost conf, Nginx को एक दो बार फिर से शुरू किया , लेकिन मुझे अभी भी त्रुटि संदेश मिल रहा है।

क्या मैंने कुछ अनदेखी की? बैकएंड है php-fpm( max_post_sizeऔर max_upload_file_sizeतदनुसार सेट किया जाता है)।


4
SSL सक्षम पर client_max_body_size के साथ समस्या है। मैं अभी तक पिछले nginx संस्करण पर एक ही समस्या है और यह सुरक्षित कनेक्शन में इस निर्देश की अनदेखी करता है। फिर भी समाधान ढूंढ रहे हैं।
नेलो

14
Nginx 1.1.19 (Ubuntu 12.04 पर): मामले में किसी और को googles इस लगता है , हालांकि 'सर्वर' में इसके साथ यह ठीक, 'http' निर्देश में client_max_body_size अनदेखी करने के लिए। ऐसा लगता है कि पिछले 6 महीनों में एक अपडेट में पेश किया गया है, क्योंकि मेरे लिए उसी सर्वर पर एक ही कॉन्फ़िगरेशन फ़ाइल काम करती थी।
डेव

1
@Dave और यदि आप 2018 में यहाँ आए, इस तय लगता है - client_max_body_sizeमें httpखंड nginx संस्करण 1.14.1 के साथ की उम्मीद प्रभाव पड़ता है
DomQ

यह सामग्री की लंबाई के हेडर (कम से कम 1.4.6 में) की जाँच करता है, इसलिए यदि कोई बड़ी फ़ाइल असंगत सामग्री की लंबाई के साथ अपलोड की जाती है, या सामग्री की लंबाई अधिकतम शरीर के आकार से कम मान पर सेट होती है, तो यह HTTP 413 को ट्रिगर नहीं करेगा
चार्ल्स एल।

जवाबों:


131

निगनेक्स डॉक्यूमेंटेशन के बाद , आप निम्नलिखित में क्लाइंट_मैक्स_बॉडी_साइज़ २० मी (या आपकी आवश्यकता का कोई भी मूल्य) सेट कर सकते हैं:

context: http, server, location

20
यह मेरे लिए स्थान पर काम नहीं करता था, सर्वर संदर्भ में काम करता था। यकीन नहीं होता कि यह ओवरराइड हो रहा है, कह नहीं सकते।
दीपेन

@ डिपेन: दिलचस्प। आपके पास NGinx का कौन सा संस्करण है?
बजे nembleton

7
Ditto ने क्या कहा, इसके अलावा, मुझे सर्वर {} या स्थान {} ब्लॉक में नहीं मिल सकता है ... यह केवल http {संदर्भ में काम करता है। विषम
रॉबी

4
मैं पुष्टि कर सकता हूं कि यह केवल http {अनुभाग में डेबियन GNU / Linux 7.1 (wheezy) पर चलने वाले nginx / 1.4.1 पर काम करता है।
फर्नांडो कोश

सेटिंग httpया locationसेटिंग करते समय सेटिंग की पुष्टि करना विफल हो जाता है । काम करता है जब serverस्तर पर सेट ।
नग्नेक्स

104

एनजीआईएनएक्स बड़े अपलोड सफलतापूर्वक होस्ट किए गए वर्डप्रेस साइटों पर काम कर रहे हैं, अंत में (नेम्बटन और rjha94 के सुझावों के अनुसार)

मैंने सोचा कि यह किसी के लिए मददगार हो सकता है, अगर मैंने उनके सुझावों के लिए थोड़ा स्पष्टीकरण जोड़ा। शुरुआत के लिए, कृपया सुनिश्चित करें कि आपने अपने बढ़े हुए निर्देश को सभी तीन अलग-अलग परिभाषा ब्लॉकों (सर्वर, स्थान और http) में शामिल किया है। प्रत्येक में एक अलग लाइन प्रविष्टि होनी चाहिए। परिणाम कुछ इस तरह होगा (जहाँ ... परिभाषा खंड में अन्य रेखाओं को दर्शाता है):

http {
    ...
    client_max_body_size 200M;
}    

(मेरे ISPconfig 3 सेटअप में, यह ब्लॉक /etc/nginx/nginx.conf फ़ाइल में है)

server {
    ...
    client_max_body_size 200M;
}

location / {
    ...
    client_max_body_size 200M;
} 

(मेरे ISPconfig 3 सेटअप में, ये ब्लॉक /etc/nginx/conf.d/default.conf फ़ाइल में हैं)

यह भी सुनिश्चित करें कि आपके सर्वर की php.ini फाइल इन NGINX सेटिंग्स के अनुरूप है। मेरे मामले में, मैंने पढ़ने के लिए php.ini के File_Uploads अनुभाग में सेटिंग बदल दी है:

upload_max_filesize = 200M

नोट: अगर आप ISPconfig 3 सेटअप (मेरा सेटअप CentOS 6.3 पर है, परफेक्ट सर्वर के अनुसार ) का प्रबंधन कर रहे हैं, तो आपको कई अलग-अलग फ़ाइलों में इन प्रविष्टियों को प्रबंधित करने की आवश्यकता होगी। यदि आपका कॉन्फ़िगरेशन चरण-दर-चरण सेटअप में एक के समान है, तो NGINX conf फ़ाइलें जिन्हें आपको संशोधित करने की आवश्यकता है, वे यहां स्थित हैं:

/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf 

मेरी php.ini फ़ाइल यहाँ स्थित थी:

/etc/php.ini

मैंने nginx.conf फ़ाइल में http {} ब्लॉक को अनदेखा करना जारी रखा। जाहिरा तौर पर, यह देखने के लिए 1M डिफ़ॉल्ट सीमा पर अपलोड करने को सीमित करने का प्रभाव था। संबंधित परिवर्तन करने के बाद, आप अपनी NGINX और PHP FastCGI प्रक्रिया प्रबंधक (PHP-FPM) सेवाओं को फिर से शुरू करना सुनिश्चित करना चाहेंगे। उपरोक्त कॉन्फ़िगरेशन पर, मैं निम्नलिखित कमांड का उपयोग करता हूं:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

24
मैं आपको /etc/init.d/nginx reloadइसके बजाय उपयोग करने का सुझाव दूंगा। इसने 'जैसे कि अगर विन्यास गलत है' जैसे लाभ जोड़े हैं, तो NginX काम करना बंद नहीं करेगा।
हेंगजी

धन्यवाद, यह वास्तव में मेरे लिए मददगार था! कई अलग-अलग php.ini फ़ाइल सेटिंग्स आदि के साथ हैकिंग के बाद मेरी समस्या का समाधान किया
Yos

लोअरकेस एम ने हमारे लिए काम किया। client_max_body_size 100 मीटर;
so_mv

13
@ हेंगजी मैं nginx -t(विन्यास फाइल सिंटैक्स का परीक्षण) और उसके बाद nginx -s reload(वास्तविक पुनः लोड करता है ) का उपयोग करने की सिफारिश करूंगा ।
अनॉयज

केवल यह बताने की जरूरत है कि मेरे आवारा बॉक्स में दो इनआई फाइलें थीं - /etc/php5/cli/php.ini और /etc/php5/fpm/php.ini और सिम्फनी का लोडेड कॉन्फ़िगरेशन fpm एक था। तो इस एक को संपादित करने के लिए मत भूलना।
जलाल

65

के रूप में मार्च वर्ष 2016 में, मैं इस मुद्दे पोस्ट json के लिए (, अजगर अनुरोध से नहीं है कि यह मायने रखती है) https पर कोशिश कर रहा में फंस गयी।

चाल "client_max_body_size 200M;" कम से कम दो स्थानों पर http {}औरserver {} :

1.http निर्देशिका

  • आमतौर पर में /etc/nginx/nginx.conf

2.server अपने vhost में निर्देशिका।

  • डेबियन / उबंटू उपयोगकर्ताओं के लिए, जो apt-get (और अन्य डिस्ट्रो पैकेज मैनेजर के माध्यम से स्थापित होते हैं, जो डिफ़ॉल्ट रूप से vhosts के साथ nginx स्थापित करते हैं), thats /etc/nginx/sites-available/mysite.com, उन लोगों के लिए जिनके पास vhosts नहीं है, संभवतः यह आपका nginx.conf या उसी निर्देशिका में है।

3.location / के रूप में एक ही जगह में निर्देशिका 2।

  • आप की तुलना में अधिक विशिष्ट हो सकते हैं /, लेकिन अगर यह बिल्कुल काम नहीं कर रहा है, तो मैं इसे लागू करने की सिफारिश करूंगा /और फिर एक बार इसका काम और अधिक विशिष्ट होगा।

याद रखें - यदि आपके पास एसएसएल है, तो आपको एसएसएल के लिए ऊपर सेट करने की आवश्यकता होगी serverऔर location, जहां कहीं भी हो सकता है (आदर्श रूप में समान रूप से 2. )। मैंने पाया कि यदि आपका क्लाइंट http पर अपलोड करने की कोशिश करता है, और आप उन्हें 301'd को https पाने की उम्मीद करते हैं, तो nginx वास्तव में http सर्वर के लिए फ़ाइल बहुत बड़ी होने के कारण रीडायरेक्ट से पहले कनेक्शन को छोड़ देगा, इसलिए इसे होना चाहिए में दोनों

हाल की टिप्पणियों से पता चलता है कि नए nginx संस्करणों के साथ एसएसएल पर इसके साथ एक समस्या है, लेकिन मैं 1.4.6 पर हूं और सब कुछ अच्छा है :)


3
दस्तावेज़ीकरण डिफ़ॉल्ट को "1 मी" के रूप में बताता है जो 1 मेगाबाइट निकला - 1 मेगाबिट नहीं। मुझे लगता है - हालांकि मैंने अभी तक इसका परीक्षण नहीं किया है - यह हमेशा मेगाबाइट है।
थॉमस

2
@ थोमस हाँ यह हमेशा एम नहीं रहा है, इसलिए यह निश्चित रूप से मेगाबाइट है, क्योंकि मैंने खुद एक परीक्षण चलाया।
CppLearner

1
आप दोनों को धन्यवाद - मैंने बिट / बाइट को हटा दिया है।
जे जे

2
2018 और nginx संस्करण 1.14.1 के रूप में, यह निश्चित लगता है - इसे कहीं और जोड़ने की आवश्यकता के बिना client_max_body_sizeअनुभाग में सम्मानित किया गया httpहै।
डोमक्यू

27

आपको निम्नलिखित परिवर्तनों को लागू करने की आवश्यकता है:

  1. अपडेट करें php.ini(सही आईएनआई फ़ाइल खोजें phpinfo();) और बढ़ाएँ post_max_sizeऔर अपने upload_max_filesizeइच्छित आकार के लिए:

    sed -i "s/post_max_size =.*/post_max_size = 200M/g" /etc/php5/fpm/php.ini
    sed -i "s/upload_max_filesize =.*/upload_max_filesize = 200M/g" /etc/php5/fpm/php.ini```
    
  2. अद्यतन nginx अपनी वेबसाइट और ऐड के लिए सेटिंग्स client_max_body_sizeअपने में मूल्य location, httpया serverसंदर्भ।

    location / {
        client_max_body_size 200m;
        ...
    }
    
  3. NginX और PHP-FPM को पुनरारंभ करें:

    service nginx restart
    service php5-fpm restart
    

नोट: कुछ समय (मेरे मामले में लगभग हर समय) आपको php-fpmप्रक्रिया को मारने की आवश्यकता है यदि यह सेवा कमांड द्वारा ठीक से ताज़ा नहीं किया गया है। यह करने के लिए कि आप प्रक्रियाओं की सूची प्राप्त कर सकते हैं ( ps -elf | grep php-fpm) और एक-एक करके मार सकते हैं ( kill -9 12345) या निम्न कमांड का उपयोग करके इसे अपने लिए कर सकते हैं:

ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9

12

कृपया देखें कि क्या आप http_} ब्लॉक के अंदर client_max_body_size निर्देश सेट कर रहे हैं न कि स्थान {} ब्लॉक के अंदर। मैंने इसे http {} ब्लॉक के अंदर सेट किया है और यह काम करता है


11

किसी ने मुझे सही किया है यदि यह खराब है, लेकिन मुझे हर चीज को यथासंभव लॉक करना पसंद है, और यदि आपको अपलोड के लिए केवल एक ही लक्ष्य मिला है (जैसा कि आमतौर पर होता है), तो बस उस एक फाइल में अपने परिवर्तनों को लक्षित करें। यह मेरे लिए Ubuntu nginx-अतिरिक्त मेनलाइन 1.7+ पैकेज पर काम करता है:

location = /upload.php {
    client_max_body_size 102M;
    fastcgi_param PHP_VALUE "upload_max_filesize=102M \n post_max_size=102M";
    (...)
}

मुझे यह विचार बहुत पसंद है लेकिन मेरे लिए यह इस तरह से काम नहीं करता है। मैं केवल इतना कर सकता हूं कि मूल्य कम हो जाए और इसे स्थान के स्तर पर न बढ़ाया जाए।
गीजा तुरी

4

मुझे हाल ही में इसी तरह की समस्या थी और यह पता चला, कि client_max_body_size 0;इस तरह के मुद्दे को हल किया जा सकता है। यह client_max_body_size को बिना किसी सीमा के सेट करेगा । लेकिन सबसे अच्छा अभ्यास अपने कोड में सुधार करना है, इसलिए इस सीमा को बढ़ाने की कोई आवश्यकता नहीं है।


3

मान लें कि आपने पहले ही ग्राहक_max_body_size और विभिन्न PHP सेटिंग्स (अपलोड_max_filesize / post_max_size, आदि) को अन्य उत्तरों में सेट कर दिया है, फिर बिना किसी परिणाम के NGINX और PHP पुनः आरंभ या पुनः लोड करें, इसे चलाएं ...

नग्नेक्स -टी

यह आपको अपने एनजीआईएनएक्स कॉन्फिग्स में कोई भी अनसुलझी त्रुटि देगा। मेरे मामले में, मैं एक पूरे दिन के लिए 413 त्रुटि से जूझ रहा था इससे पहले कि मुझे एहसास हुआ कि NGINX कॉन्फ़िगरेशन में कुछ अन्य अनसुलझी एसएसएल त्रुटियां थीं (सेर्ट्स के लिए गलत पथ) जिसे ठीक करने की आवश्यकता थी। एक बार जब मैंने उन अनसुलझे मुद्दों को ठीक कर लिया जो मुझे 'nginx -T' से मिले, NGINX और EUREKA को फिर से लोड किया !! यह तय है।


3

मैं एक देव सर्वर स्थापित कर रहा हूं ताकि हमारे पुराने लाइव दर्पणों के साथ खेल सकूं , मैंने परफेक्ट सर्वर - Ubuntu 14.04 (nginx, BIND, MySQL, PHP, Postfix, Dovecot और ISPConfig 3) का उपयोग किया

उसी मुद्दे का अनुभव करने के बाद, मैं इस पद पर आया और कुछ भी काम नहीं कर रहा था। मैंने प्रत्येक अनुशंसित फ़ाइल (nginx.conf, ispconfig.vhost, / sites-available / default, आदि) में मान बदल दिया है।

अंत में, client_max_body_sizeमेरी /etc/nginx/sites-available/apps.vhostऔर nginx को फिर से शुरू करने में क्या बदलाव आया। उम्मीद है कि यह किसी और की मदद करता है।


3

मैं एक ही समस्या से मिलता हूं, लेकिन मुझे नगीनेक्स से कोई लेना देना नहीं था। मैं नोडज को बैकएंड सर्वर के रूप में उपयोग कर रहा हूं, नंगेक्स को रिवर्स प्रॉक्सी के रूप में उपयोग करें, नोड सर्वर द्वारा 413 कोड ट्रिगर किया गया है। नोड का उपयोग शरीर कोआ पार्स। कोआ urlencoded लंबाई को सीमित करता है।

formLimit: urlencoded शरीर की सीमा। यदि शरीर समाप्त होता है तो इस सीमा से बड़ा होने पर, 413 त्रुटि कोड वापस आ जाता है। डिफ़ॉल्ट 56kb है।

सेट फ़ॉर्मलिमिट टू बिग इस समस्या को हल कर सकता है।


0

एक ही मुद्दा था कि client_max_body_sizeनिर्देश की अनदेखी की गई थी।

मेरी मूर्खतापूर्ण त्रुटि थी, कि मैंने एक फ़ाइल अंदर रखी थी, /etc/nginx/conf.dजिसके साथ समाप्त नहीं हुआ था .conf। Nginx डिफ़ॉल्ट रूप से इन्हें लोड नहीं करेगा।


-2

यदि आप विंडोज़ वर्जन नग्नेक्स का उपयोग कर रहे हैं, तो आप सभी नगनेक्स प्रक्रिया को मारने की कोशिश कर सकते हैं और इसे देखने के लिए पुनः आरंभ कर सकते हैं। मुझे उसी समस्या का सामना करना पड़ा मेरे परिवेश में, लेकिन इस समाधान के साथ इसे हल किया।


यह मेरा मुद्दा था, धन्यवाद! एक Nginx उदाहरण ठीक से बाहर नहीं निकला था मुझे लगता है। यह जाँचना कभी बुरा नहीं है कि क्या यह खिड़कियों पर बाहर निकलता हैtasklist /fi "imagename eq nginx.exe"
Valery Baranov
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.