nginx - ক্লায়েন্ট_ম্যাক্স_বডি_ সাইজের কোনও প্রভাব নেই


205

nginx বলতে থাকে client intended to send too large body। গুগলিং এবং আরটিএম আমাকে ইশারা করল client_max_body_size। আমি এটি সেট 200mমধ্যে nginx.confহিসাবে ভাল হিসাবে vhost confবার কয়েক, পুনরায় আরম্ভ nginx কিন্তু আমি এখনও ত্রুটি বার্তা পেয়ে করছি।

আমি কি কিছু উপেক্ষা করেছি? ব্যাকএন্ডটি হয় php-fpm( max_post_sizeএবং max_upload_file_sizeসেই অনুযায়ী সেট করা হয়)।


4
এসএসএল সক্ষম থাকা ক্লায়েন্ট_ম্যাক্স_দেহী_ সাইজে সমস্যা আছে। টিকে থাকা এনজিনেক্স সংস্করণে আমি ঠিক একই সমস্যা পেয়েছি এবং এটি সুরক্ষিত সংযোগগুলিতে এই নির্দেশকে উপেক্ষা করে। তবুও সমাধান খুঁজছি।
নিওলো

14
যদি অন্য কেউ এটি গুগল করে: এনগিনেক্স ১.১.১৯৯ (উবুন্টু ১২.০৪ তে) ক্লায়েন্ট_ম্যাক্স_দেহী_সাইজকে 'HTTP' নির্দেশনায় উপেক্ষা করবে বলে মনে হচ্ছে , যদিও এটি 'সার্ভারে' ঠিক আছে। এটি গত 6 মাস বা তারও বেশি সময়ে একটি আপডেটে প্রবর্তিত হয়েছে বলে মনে হয়, কারণ আমার জন্য একই সার্ভারে একই কনফিগারেশন ফাইলটি কাজ করত।
ডেভ

1
@ ডেভ এবং আপনি যদি 2018 এ এখানে আসেন তবে client_max_body_sizeএটি স্থির মনে হয়েছে - httpবিভাগে এনজিনেক্স সংস্করণ 1.14.1 এর সাথে প্রত্যাশিত প্রভাব রয়েছে
ডমকিউ

এটি সামগ্রীর দৈর্ঘ্যের শিরোনামটি পরীক্ষা করে (কমপক্ষে 1.4.6 এ), তাই যদি কোনও আনসেট সামগ্রী সামগ্রীর দৈর্ঘ্য বা সামগ্রীর দৈর্ঘ্য সর্বাধিক শরীরের আকারের চেয়ে কম মান সেট করা হয় তবে এটি HTTP 413
চার্লসকে

উত্তর:


131

নিগিনেক্স ডকুমেন্টেশন অনুসরণ করে , আপনি নিম্নলিখিত প্রসঙ্গে ক্লায়েন্ট_ম্যাক্স_বিডি_সাইজ 20 মি (বা কোনও মান প্রয়োজন) সেট করতে পারেন:

context: http, server, location

20
এটি আমার পক্ষে অবস্থানের জন্য কাজ করে না, সার্ভারের প্রসঙ্গে কাজ করে। এটি ওভাররাইড করা হচ্ছে কিনা তা নিশ্চিত নয়, বলতে পারি না।
দীপেন

@ ডিপেন: আকর্ষণীয়। আপনার কাছে এনজিঞ্জের কোন সংস্করণ রয়েছে?
নিমবিলটন

7
ডিপেন যা বলেছিল, তা আমি সার্ভারে can't} বা অবস্থান {} ব্লকগুলিতে পেতে পারি না তা ছাড়া ... এটি কেবলমাত্র http {} প্রসঙ্গে কাজ করে। অদ্ভুত
রবি

4
আমি নিশ্চিত করতে পারি যে এটি কেবল http}} বিভাগে দেবিয়ান জিএনইউ / লিনাক্স 7.১ (হুইজি) চালিত এনজিনেক্স / ১.৪.১ এ কাজ করে।
ফার্নান্দো কোশ

সেটিংসটি সেটিংসে httpবা locationসেটিংস স্থাপনের সময় ব্যর্থ হয় । serverস্তর স্থাপন করা হলে কাজ করে । nginx / 1.4.4
AlbertEngelB

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 ফাইলটি এই এনজিআইএনএক্স সেটিংসের সাথে সামঞ্জস্যপূর্ণ রয়েছে তা নিশ্চিত করুন। আমার ক্ষেত্রে, আমি পড়তে php.ini এর ফাইল_আপলোড বিভাগে সেটিংস পরিবর্তন করেছি:

upload_max_filesize = 200M

দ্রষ্টব্য: আপনি যদি ISPconfig 3 সেটআপ পরিচালনা করে থাকেন (আমার সেটআপটি CentOS 6.3 এ রয়েছে, পারফেক্ট সার্ভার অনুসারে ), আপনাকে আলাদা আলাদা ফাইলগুলিতে এই এন্ট্রিগুলি পরিচালনা করতে হবে। যদি আপনার কনফিগারেশনটি ধাপে ধাপে সেটআপের মতো হয় তবে আপনার যে এনজিআইএনএক্স কনফ ফাইলগুলি সংশোধন করতে হবে তা এখানে অবস্থিত:

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

আমার php.ini ফাইলটি এখানে অবস্থিত ছিল:

/etc/php.ini

আমি nginx.conf ফাইলের মধ্যে {} ব্লকটি অবহেলা করতে থাকি। স্পষ্টতই, এটি উপেক্ষা করে 1M ডিফল্ট সীমাতে আপলোড সীমাবদ্ধ করার প্রভাব পড়ে। সম্পর্কিত পরিবর্তনগুলি করার পরে, আপনি আপনার এনজিআইএনএক্স এবং পিএইচপি ফাস্টসিজিআই প্রসেস ম্যানেজার (পিএইচপি-এফপিএম) পরিষেবাগুলি পুনরায় চালু করার বিষয়ে নিশ্চিত হতে চাইবেন। উপরের কনফিগারেশনে, আমি নিম্নলিখিত কমান্ডগুলি ব্যবহার করি:

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

24
আমি আপনাকে /etc/init.d/nginx reloadপরিবর্তে ব্যবহার করার পরামর্শ দিচ্ছি । এটি 'কনফিগারটি ভুল হলে' NginX কাজ করা বন্ধ করবে না এর মতো সুবিধাগুলি যুক্ত করেছে।
হেনজি

ধন্যবাদ এটি আমার জন্য সত্যই সহায়ক ছিল! বিভিন্ন php.ini ফাইলটি সেটিংস প্রচুর সঙ্গে প্রায় ফাটান পর আমার সমস্যার সমাধান ইত্যাদি
Yos

লোয়ারকেস এম আমাদের জন্য কাজ করেছেন। ক্লায়েন্ট_ম্যাক্স_বডি_ সাইজ 100 মি;
so_mv

13
@ হেনজি আমি সুপারিশ করব nginx -t(কনফিগারেশন ফাইল সিনট্যাক্স পরীক্ষা করে) এবং তার পরিবর্তে nginx -s reload(প্রকৃত পুনরায় লোড করে) using
অণয়েজ

শুধু এটুকু উল্লেখ করতে হবে যে আমার যান্ত্রিক বাক্সে দুটি আইএনআই ফাইল ছিল - /etc/php5/cli/php.ini এবং /etc/php5/fpm/php.ini এবং সিমফনির বোঝা কনফিগারেশনটি ছিল এফপিএম এক। সুতরাং এটি সম্পাদনা করতে ভুলবেন না।
জালাল

65

২০১ March সালের মার্চ পর্যন্ত , আমি এই বিষয়টি পোষ্ট JSON করার জন্য (, পাইথন অনুরোধগুলি না যে এটা গুরুত্বপূর্ণ) HTTPS উপর চেষ্টা গাড়ীতে আঘাত করেছেন।

কৌশলটি হ'ল "ক্লায়েন্ট_ম্যাক্স_বডি_ সাইজ 200 এম;" কমপক্ষে দুটি জায়গায় http {}এবংserver {} :

1.http ডিরেক্টরির

  • সাধারণত /etc/nginx/nginx.conf

2.server আপনার vhost দেখুন মধ্যে ডিরেক্টরি।

  • ডেবিয়ান / উবুন্টু ব্যবহারকারীরা যারা এপ্ট-গেইনের মাধ্যমে ইনস্টল করেছেন (এবং অন্যান্য ডিস্ট্রো প্যাকেজ ম্যানেজার যারা ডিফল্টরূপে vhosts দিয়ে এনগিনেক্স ইনস্টল করেন), তবে /etc/nginx/sites-available/mysite.comযাদের vhosts নেই তাদের পক্ষে সম্ভবত এটি আপনার এনগিনএক্স.কনফ বা একই ডিরেক্টরিতে রয়েছে।

3.location / হিসাবে একই জায়গায় ডিরেক্টরির 2।

  • আপনি এর চেয়ে আরও সুনির্দিষ্ট হতে পারেন /তবে এটি যদি কিছুতেই কাজ না করে তবে আমি এটি প্রয়োগ করার পরামর্শ দিই /এবং তারপরে এটির কাজটি আরও নির্দিষ্ট হয়ে যায়।

মনে রাখবেন - আপনার যদি এসএসএল থাকে তবে এর জন্য আপনাকে এসএসএলের জন্য উপরেরটি সেট করতে হবে serverএবং locationযেখানেই তা হতে পারে (আদর্শভাবে এর মতোই )। আমি দেখেছি যে যদি আপনার ক্লায়েন্টটি HTTP এ আপলোড করার চেষ্টা করে, এবং আপনি তাদের https 301'র কাছে পাওয়ার প্রত্যাশা করেন, তবে এইচএনপি সার্ভারের ফাইল খুব বড় হওয়ার কারণে এনগিনেক্স পুনঃনির্দেশের আগে সংযোগটি আসলে ফেলে দেবে, তাই এটি হওয়া দরকার মধ্যে উভয়

সাম্প্রতিক মন্তব্যগুলি প্রস্তাব দেয় যে এসএসএলে নতুন এনগিনেক্স সংস্করণ সহ এটির একটি সমস্যা রয়েছে তবে আমি 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. এনগিনএক্স এবং পিএইচপি-এফপিএম পুনরায় চালু করুন:

    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 inside} ব্লকের ভিতরে অবস্থিত ক্লায়েন্ট_ম্যাক্স_বডি_সাইজ নির্দেশিকা সেট করছেন এবং অবস্থান location location ব্লকের ভিতরে নয়। আমি এটিকে http {} ব্লকের ভিতরে রেখেছি এবং এটি কাজ করে


11

কেউ যদি এটি খারাপ হয় তবে আমাকে সংশোধন করে তবে আমি যতটা সম্ভব সবকিছু লক করতে চাই এবং আপনি যদি আপলোডগুলির জন্য কেবল একটি লক্ষ্য পেয়ে থাকেন (যেমনটি এটি সাধারণত ঘটে থাকে) তবে কেবল সেই ফাইলটিতে আপনার পরিবর্তনগুলি লক্ষ্য করুন। এটি আমার জন্য উবুন্টু এনগিনেক্স-এক্সট্রা মেনলাইন 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;ধরনের একটি সমস্যা সমাধান করতে পারে। এটি ক্লায়েন্ট_ম্যাক্স_বডি_সাইজকে কোনও সীমাতে সেট করবে । তবে সর্বোত্তম অনুশীলন হ'ল আপনার কোডটি উন্নত করা, সুতরাং এই সীমাটি বাড়ানোর দরকার নেই।


3

ধরে নিই যে আপনি ইতিমধ্যে অন্য উত্তরে ক্লায়েন্ট_ম্যাক্স_বডি_সাইজ এবং বিভিন্ন পিএইচপি সেটিংস (আপলোড_ম্যাক্স_ফাইলেজ / পোস্ট_ম্যাক্স_সাইজ ইত্যাদি) সেট করে রেখেছেন, তারপরে কোনও ফলাফল ছাড়াই পুনরায় চালু বা এনজিআইএনএক্স এবং পিএইচপি পুনরায় লোড করেছেন, এটি চালান ...

nginx -T

এটি আপনাকে আপনার এনজিআইএনএক্স কনফিগারেশনে কোনও অমীমাংসিত ত্রুটি দেয়। আমার ক্ষেত্রে, এনজিআইএনএক্স কনফিগারেশনে আরও কিছু অমীমাংসিত এসএসএল ত্রুটি রয়েছে (শংসাপত্রগুলির জন্য ভুল পথ) যা সংশোধন করা দরকার তা বোঝার আগে আমি পুরো দিন ধরে 413 ত্রুটির সাথে লড়াই করেছি। একবার আমি 'এনগিনেক্স-টি' থেকে সমাধান না হওয়া সমস্যাগুলি সমাধান করেছি, এনজিআইএনএক্স এবং ইউরেকা পুনরায় লোড করেছি !! এটা এটি স্থির।


3

আমি আমাদের পুরানো লাইভটিকে আয়নাগুলি দিয়ে খেলতে একটি ডেভ সার্ভার সেট আপ করছি I লাইভটিকে পারফেক্ট সার্ভার - উবুন্টু 14.04 (এনগিনেক্স, বিআইএনডি, মাইএসকিউএল, পিএইচপি, পোস্টফিক্স, ডোভকোট এবং আইএসপি কনফিগ 3)

একই সমস্যাটি দেখার পরে, আমি এই পোস্টটি জুড়ে এসেছি এবং কিছুই কাজ করছে না। আমি প্রতিটি প্রস্তাবিত ফাইলে (nginx.conf, ispconfig.vhost, / সাইট-উপলব্ধ / ডিফল্ট ইত্যাদি) মান পরিবর্তন করেছি changed

পরিশেষে, client_max_body_sizeআমার /etc/nginx/sites-available/apps.vhostএবং nginx পুনরায় আরম্ভ করা কৌশলটি কি করেছে। আশা করি এটি অন্য কাউকে সাহায্য করবে।


3

আমি একই সমস্যাটি পূরণ করেছি, তবে আমি এটি এনজিএনএক্সের সাথে কিছুই করতে পারি নি। আমি নোডেজগুলি ব্যাকএন্ড সার্ভার হিসাবে ব্যবহার করছি, বিপরীত প্রক্সি হিসাবে এনগিনেক্স ব্যবহার করি, 413 কোড নোড সার্ভার দ্বারা ট্রিগার হয়। নোড ব্যবহার কোয়া শরীর পার্স। কোয়া urlencoded দৈর্ঘ্য সীমাবদ্ধ।

formLimit: urlencoded শরীরের সীমা। যদি শরীর এই সীমাটির চেয়ে বড় হয়ে যায় তবে একটি 413 ত্রুটি কোড ফিরে আসে। ডিফল্ট হয় 56 কেবি।

বড় আকারে ফর্মলিট সেট করা এই সমস্যার সমাধান করতে পারে।


0

একই সমস্যা ছিল যে client_max_body_size নির্দেশটিকে উপেক্ষা করা হয়েছিল।

আমার নির্বোধ ত্রুটিটি ছিল, আমি একটি ফাইল ভিতরে রেখেছিলাম /etc/nginx/conf.dযা শেষ হয় নি .conf। Nginx এগুলি ডিফল্টরূপে লোড করবে না।


-2

আপনি যদি উইন্ডোজ সংস্করণ এনজিনেক্স ব্যবহার করে থাকেন তবে আপনি সমস্ত এনজিএনএক্স প্রক্রিয়াটি মেরে ফেলার চেষ্টা করতে পারেন এবং এটি দেখার জন্য এটি পুনরায় চালু করতে পারেন। আমি আমার পরিবেশে একই সমস্যার মুখোমুখি হয়েছি, তবে এই সমাধান দিয়ে সমাধান করেছি।


এটা আমার সমস্যা ছিল, আপনাকে ধন্যবাদ! আমার ধারণা, একটি এনগিনেক্স সঠিকভাবে উপস্থিত ছিল না। উইন্ডোতে এটি বেরিয়ে এসেছে কিনা তা যাচাই করা কখনও খারাপ নয়tasklist /fi "imagename eq nginx.exe"
ভ্যালারি বারানভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.