অবৈধ অনুরোধ ব্লক আকার


142

আমি সম্রাট মোডে উউসগি চালাচ্ছি

uwsgi --emperor /path/to/vassals/ --buffer-size=32768

এবং এই ত্রুটি পেয়ে

invalid request block size: 21327 (max 4096)...skip

কি করো?? আমি 32768 -b চেষ্টাও করেছি


1
বাফার আকারটি এখনও স্পষ্টতই ডিফল্ট মান (4096), নিশ্চিত হয়ে নিন যে আপনি সঠিক পরিস্থিতিতে কাজ করছেন। আপনি "-b 32 কে "ও লিখতে পারেন। এছাড়াও নিশ্চিত করুন যে এই বিকল্পটি (বাফার-আকার) ইতিমধ্যে কিছু কনফিগারেশন ফাইলে সেট করা নেই।
জাকিনস্টার

কোনও কনফিগারেশন ফাইল নেই। এখনও কাজ করছে না :(
কার্তিক রোকদে

8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html আপনি http প্রোটোকল ব্যবহার করে একটি uwsgi সকেটের সাথে সংযোগ স্থাপনের চেষ্টা করছেন, এগুলি ছাড়াও সম্রাটকে নির্দিষ্ট করা বিকল্পগুলি উত্তরাধিকার সূত্রে প্রাপ্ত নয়, এটি কেবলমাত্র একটি প্রক্রিয়া পরিচালক
রবার্তো

@ জাকিনস্টার কিছু কারণে মূল্য ফর্ম্যাটটি kআমার পক্ষে কাজ করে না। পুরো নম্বর সরবরাহ করতে হয়েছিল। আপনি এখানে যে ফর্ম্যাটগুলি ব্যবহার করতে পারেন তাতে কোনও পয়েন্টার খুঁজে পাওয়া যায় না।
বিখ্যাতগারকিন

উত্তর:


207

কিছু টিউটোরিয়াল অনুসরণ করার সময় আমি একই সমস্যার মধ্যে পড়েছিলাম। সমস্যাটি ছিল আমি বিকল্পটির socket = 0.0.0.0:8000পরিবর্তে সেট করেছিলাম http = 0.0.0.0:8000socketকিছু তৃতীয় পক্ষের রাউটার (উদাহরণস্বরূপ httpএনজিনেক্স ) ব্যবহার করার উদ্দেশ্যে বিকল্পটি যখন বিকল্পটি সেট করা থাকে তখন উউসগি আগত এইচটিটিপি অনুরোধগুলি গ্রহণ করতে পারে এবং সেগুলি নিজেই রুট করতে পারে।


5
আমি এই সম্পর্কে মন্তব্য করতে চাই: উউসগির কাছে "এইচটিপি", "এইচটিপি-সকেট" এবং "সকেট" বিকল্প রয়েছে। আমি সিজিজি পাইথন স্ক্রিপ্টগুলি কল করতে চেয়েছিলাম; "সকেট" উত্তর ছিল।
নিউক্লিয়ার পিওন

এনগিনেক্স কনফিগারেশন ফাইলে আমরা এটি ব্যবহার করতে পারি: অন্তর্ভুক্ত / ইত্যাদি / এনজিনেক্স / ইউউজি_প্রেমস; uwsgi_pass django_upstream;
মেন্নানভ

3
এটি সঠিক সমাধান নয়। যদি আমরা সকেটগুলি ইউনিক্স করতে চাই?
ফরশীদ

2
@ ফারশিদ, আমি কেবল বর্ণনা করেছি যে ওপি কেন এই ত্রুটিটি দেখছে। কীভাবে এটি ঠিক করবেন তা সম্পূর্ণ আপনার উপর নির্ভর করে। এমনও হতে পারে socket = /tmp/myapp.sockবা http = 0.0.0.0:8000বা যাই হোক না কেন আপনার চাহিদা উপর নির্ভর করে।
পলাশটি

1
যদিও এই উত্তরটি কিছু পরিস্থিতিতে সমস্যার সমাধান করতে পারে, আমি মনে করি যে সাধারণ ক্ষেত্রে সঠিক উত্তরটি নীচে @ ফরশিদ দ্বারা সরবরাহ করা হয়েছে।
আগস্টো ডাস্ট্রেরো

142

সঠিক সমাধানটি HTTP প্রোটোকলে স্যুইচ করা নয়। আপনাকে কেবল uWSGI সেটিংসে বাফার আকার বাড়ানো দরকার increase

buffer-size=32768

বা কমান্ডলাইন মোডে:

-b 32768

অফিসিয়াল ডকুমেন্টেশন থেকে উদ্ধৃতি:

ডিফল্টরূপে ইউডাব্লুএসজিআই প্রতিটি অনুরোধের শিরোনামের জন্য খুব ছোট বাফার (4096 বাইট) বরাদ্দ করে। যদি আপনি আপনার লগগুলিতে "অবৈধ অনুরোধ ব্লক আকার" পেতে শুরু করেন তবে এর অর্থ হতে পারে আপনার আরও বড় বাফার দরকার। বাফার-আকার বিকল্পের সাহায্যে এটি (65535 অবধি) বাড়ান।

আপনি যদি আপনার লগগুলিতে অনুরোধ ব্লক আকার হিসাবে '21573' পান তবে এর অর্থ হ'ল আপনি এইচটিটিপি প্রোটোকলটি ইউজগি প্রোটোকলের সাথে কথা বলার জন্য ব্যবহার করতে চলেছেন। এটি করবেন না।

এখান থেকে: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html


1
কখনও কখনও আপনি আছে , HTTP প্রোটোকল ব্যবহার যেহেতু UNIX সকেট স্থানীয় মেশিনে শুধুমাত্র উপলব্ধ। আপনি যখন বেশ কয়েকটি মেশিন এবং তার উপরে একটি পৃথক ব্যালেন্সার রাখেন তখন একটি পরিস্থিতি বিবেচনা করুন - আপনাকে http-socketএখানে ব্যবহার করতে হবে ।
পলাশটি

@ প্যালাসাটি বা একটি আইপি সকেট এবং uwsgiপ্রোটোকল, তারপরে আপনি ওপি হিসাবে একই ত্রুটি পেতে পারেন
আন্দ্রেই

2
@ পালাসাটি, যে কোনও কারণেই, বাফার-আকার ঠিক করা সমস্যা সমাধান করবে!
ফারশীদ

বিপরীত প্রক্সি হিসাবে nginx ব্যবহার করার সময় আমাকে ব্যবহার করতে হয়েছিল http-socket। বাফারের আকার বাড়ানো হলেও অন্য যে কোনও কিছু "502 ব্যাড গেটওয়ে" দিয়েছে।
হুব্রো

উদ্ধৃত ডকুমেন্টেশনের হিসাবে "আপনি যদি লগগুলিতে অনুরোধ ব্লক আকার হিসাবে '21573' পান তবে এর অর্থ আপনি HTTP প্রোটোকলটি ইউজগি প্রোটোকল বলার উদাহরণ সহকারে কথা বলছেন this এটি করবেন না" " সুতরাং পরিষ্কার যে পরামর্শটি ভুল .... এছাড়াও, @ কার্টিক ব্যবহারকারী ইতিমধ্যে "-b" বিকল্পটি ব্যবহার করার চেষ্টা করেছেন ...
লিটল ইস্টার

14

আমি একই সমস্যা nginx নীচে চালানোর চেষ্টা গাড়ীতে আঘাত এবং ডক্স নিম্নলিখিত ছিল এখানে । এটি লক্ষণীয় গুরুত্বপূর্ণ যে একবার আপনি এনজিনেক্সে স্যুইচ করেছেন আপনাকে নিশ্চিত করে নিতে হবে যে আপনি --সকেট প্যারাম দ্বারা নির্দিষ্ট পোর্টে অ্যাপ্লিকেশনটি অ্যাক্সেস করার চেষ্টা করছেন না, বরং এনজিনেক্স.কনফের "শুনুন" পোর্টটি ব্যবহার করছেন। যদিও আপনার সমস্যাটি আলাদাভাবে বর্ণনা করা হয়েছে শিরোনামটি আমার সাথে থাকা সমস্যার সাথে মেলে।


হ্যাঁ আমি একই জিনিস মধ্যে দৌড়ে। অন্য কথায়, আমি যখন স্থানীয়ভাবে বন্দরটি কার্ল করেছিলাম তখন আমার একটি ত্রুটি ঘটেছে, আমি আমার wsgi বিপরীত প্রক্সিটির 'অবস্থান' এ সফলভাবে আমার `nginx.conf 'তে উল্লিখিত হিসাবে যেতে পারি, কারণ ডাব্লুএসজি সার্ভারের প্রোটোকলটি চালু আছে আমার নির্বাচিত সকেটটি ডাব্লুএসজি ছিল এবং এইচটিপি নয়
ডানায়মাচাইন

14

আমি উউজগিতে প্রোটোকল = http যুক্ত করে এটি ঠিক করতে পারতাম


2
আমি কীভাবে এটি uWSGI সেটিংস ইনআই ফাইলটিতে সেট আপ করতে পারি? আমার কনফিগারেশনটি আপনার পরামর্শ নিয়ে কাজ করে তবে কেবল কমান্ড লাইনে।
হেনরি লিংস

2
@ হেনরিলিঙ্কস, protocol=httpআপনার .iniফাইলটিতে কেবল যুক্ত করুন
151291

7

এই ত্রুটিটি দেখানো হয় যখন ইউডাব্লুএসজিআই সার্ভার uwsgiপ্রোটোকল ব্যবহার করে এবং কেউ httpপ্রোটোকলের মাধ্যমে curlবা ওয়েব ব্রাউজারের মাধ্যমে সরাসরি এটি অ্যাক্সেস করার চেষ্টা করে। আপনি যদি পারেন তবে আপনার uWSGI সার্ভারটি httpপ্রোটোকল ব্যবহার করার জন্য কনফিগার করার চেষ্টা করুন , যাতে আপনি এটি ওয়েব ব্রাউজার বা কার্লের মাধ্যমে অ্যাক্সেস করতে পারেন।

আপনি এটি পরিবর্তন করতে (বা না চান) এর ক্ষেত্রে, আপনি nginxস্থানীয় বা দূরবর্তী uWSGI সার্ভারের সামনে একটি বিপরীত প্রক্সি (উদাহরণস্বরূপ ) ব্যবহার করতে পারেন , https://uwsgi-docs.readthedocs.org/en/latest/Nginx দেখুন .html

যদি এটি খুব বেশি কাজের মতো মনে হয় তবে uwsgi-toolsঅজগর প্যাকেজটি চেষ্টা করে দেখুন :

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030

uwsgi_proxyআপনার যদি ওয়েব ব্রাউজারের মাধ্যমে আপনার অ্যাপ্লিকেশন (গুলি) অ্যাক্সেস করতে হয় তবে একটি সাধারণ বিপরীত প্রক্সি সার্ভারও রয়েছে more আরও প্রসারিত উত্তর দেখুন https://stackoverflow.com/a/32893520/179581


2

ডক্সের অন্য মন্তব্যে যেমন উল্লেখ করা হয়েছে:

আপনি যদি আপনার লগগুলিতে অনুরোধ ব্লক আকার হিসাবে '21573' পান তবে এর অর্থ হ'ল আপনি এইচটিটিপি প্রোটোকলটি ইউজগি প্রোটোকলের সাথে কথা বলার জন্য ব্যবহার করতে চলেছেন। এটি করবেন না।

আপনি যদি এনগিনেক্স ব্যবহার করে থাকেন তবে আপনার যদি এই কনফিগারেশন (বা অনুরূপ কিছু বিজোড়) থাকে তবে এটি ঘটবে:

proxy_pass http://unix:/path/to/socket.sock

এটি ইউডাব্লুএসজিআইতে এইচটিটিপি বলছে (যা এটিকে ক্ষিপ্ত করে তোলে)। পরিবর্তে, ব্যবহার করুন:

uwsgi_pass unix:/path/to/socket.sock;

0

man im havin একই ইস্যু; তাই আমি এটি করেছি ... ইউডাব্লুএসজিআই + জ্যাঞ্জো + এনজিআইএনএক্স + প্রতিক্রিয়া + ব্যবহার করে দেখুন

1 - ন্যানো /etc/uwsgi/sites/app_plataform.ini [uwsgi]

ডিজেঙ্গো_এসটিটিংসিং_মোডল = অ্যাপ_প্লাটফর্ম.সেটিংস এনভি = ডিজেঙ্গো_এসটিটিংসস_মুডুএল সেটিংস.কনফিগার ()

chdir = / হোম / অ্যাপ_প্লেটাফর্ম হোম = / মূল / অ্যাপ_প্লেটাফর্ম মডিউল = prometheus_plataform.wsgi: অ্যাপ্লিকেশন

মাস্টার = সত্য প্রক্রিয়াগুলি = 33 বাফার-সাইজ = 32768

সকেট = / হোম / অ্যাপ_প্ল্যাটফর্ম / অ্যাপ_প্ল্যাটফর্ম.সোক চিড-সকেট = 777 ভ্যাকুয়াম = সত্য

2 - এনজিনেক্সে ব্যবহারকারীর গুরুতর পারফরম্যান্স আপগ্রেড করুন ... ব্যবহারকারী www-ডেটা;

কর্মী_প্রসেস অটো; কর্মী_প্রক্রিয়া 4; pid /run/nginx.pid; অন্তর্ভুক্ত /etc/nginx/modules-enabled/*.conf;

ইভেন্টস {কর্মী_সংযোগ 4092; মাল্টি_অ্যাকসেপ্ট অন; }

http {## আপগ্রেড কনফিগার করুন

ক্লায়েন্ট_বডি_বফার_ সাইজ 16 কে; ক্লায়েন্ট_হেডার_বফার_ সাইজ 16 কে; ক্লায়েন্ট_ম্যাক্স_দেহী_সিজ 32 মি; # লার্জ_ক্লিয়েন্ট_হেডার_বফার্স 2 1 কে;

ক্লায়েন্ট_বডি_টাইমআউট 12; ক্লায়েন্ট_হেডার_টাইমআউট 12; keepalive_timeoutout 15; সেন্ডআউটআউট 10; অ্যাক্সেস_লগ বন্ধ;

## # মৌলিক বৈশিষ্ট্যসহ ##

সেন্ডফিল চালু; tcp_nopush চালু; tcp_nodelay চালু; # কেপালিভ_টাইমআউট 65; প্রকার_হ্যাশ_ম্যাক্স_সেস 2048; সার্ভার_ টোকেন বন্ধ;

সার্ভার_নাম_হ্যাশ_বাকেট_সাইজ 64; # সার্ভার_নাম_ইন_ প্রত্যক্ষ বন্ধ;

/etc/nginx/mime.types অন্তর্ভুক্ত; ডিফল্ট_প্রকার অ্যাপ্লিকেশন / অক্টেট-স্ট্রিম;

## # এসএসএল সেটিংস ##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # এসএসএভি 3 ছাড়ছে, রেফ: পুডল এসএসএল_প্রেফার_সার্ভার_সিফার্স চালু;

## # লগিং সেটিংস ##

অ্যাক্সেস_লগ /var/log/nginx/access.log; ত্রুটি_লগ /var/log/nginx/error.log;

## # জিজিপ সেটিংস ##

gzip on; gzip_comp_level 2; জিজিপ_মিনি_ দৈর্ঘ্য 1000; gzip_proxied
মেয়াদোত্তীর্ণ নো-ক্যাশে নো-স্টোর ব্যক্তিগত লেখক ; gzip_types পাঠ্য / সরল অ্যাপ্লিকেশন / এক্স-জাভাস্ক্রিপ্ট পাঠ / এক্সএমএল পাঠ্য / সিএসএস অ্যাপ্লিকেশন / এক্সএমএল; gzip_vary চালু;

#gzip_proxied যে কোনও; #gzip_comp_level 6; gzip_buffers 16 8 কে; gzip_http_version 1.1; # জিজিপ_প্রকার পাঠ্য / সরল পাঠ / সিএসএস অ্যাপ্লিকেশন / জসন অ্যাপ্লিকেশন / জাভাস্ক্রিপ্ট পাঠ / এক্সএমএল অ্যাপ্লিকেশন / এক্সএমএল অ্যাপ্লিকেশন / এক্সএমএল + আরএসএস পাঠ্য / জাভাস্ক্রিপ্ট;

## # ভার্চুয়াল হোস্ট কনফিগস ##

/etc/nginx/conf.d/ .conf অন্তর্ভুক্ত করুন ; অন্তর্ভুক্ত / ইত্যাদি / nginx / সাইটগুলি সক্ষম / ; }

3 - তারপরে ... পরিষেবাগুলি পুনরায় চালু করুন বা সার্ভার পুনরায় চালু করুন ...

systemctl পুনরায় আরম্ভ করুন & systemctl পুনরায় আরম্ভ করুন nginx

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.