uwsgi अमान्य अनुरोध ब्लॉक आकार


142

मैं सम्राट विधा में uwsgi चला रहा हूँ

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

और यह त्रुटि हो रही है

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

क्या करें?? मैंने भी कोशिश की-बी 32768


1
बफर आकार स्पष्ट रूप से अभी भी डिफ़ॉल्ट मूल्य (4096) है, सुनिश्चित करें कि आप सही उदाहरण पर काम कर रहे हैं। आप "-b 32k" भी लिख सकते हैं। यह भी सुनिश्चित करें कि यह विकल्प (बफर-आकार) पहले से ही कुछ कॉन्फ़िगरेशन फ़ाइल में सेट नहीं है।
ज़ाकिंस्टर

कोई कॉन्फ़िगरेशन फ़ाइल नहीं है। अभी भी काम नहीं कर रहा है :(
कार्तिक रोकड़े 12

8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html आप http प्रोटोकॉल का उपयोग करके एक uwsgi सॉकेट से कनेक्ट करने का प्रयास कर रहे हैं, इसके अलावा सम्राट को निर्दिष्ट विकल्प विरासत में नहीं मिले हैं, यह केवल एक प्रक्रिया प्रबंधक है
roberto

@zakinster किसी कारण से kमेरे लिए काम नहीं किया। पूरा नंबर देना था। जिन स्वरूपों का आप यहां उपयोग कर सकते हैं उन पर कोई संकेत नहीं मिल सकता है।
प्रसिद्धगार्किन

जवाबों:


207

मैं कुछ ट्यूटोरियल का अनुसरण करते हुए एक ही मुद्दे में भाग गया। समस्या यह थी कि मैंने socket = 0.0.0.0:8000इसके बजाय विकल्प निर्धारित किया था http = 0.0.0.0:8000socketविकल्प का उपयोग कुछ तृतीय-पक्ष राउटर (उदाहरण के लिए nginx) के साथ किया जाना है, जबकि जब httpविकल्प सेट किया जाता है तो uwsgi आने वाले HTTP अनुरोधों को स्वीकार कर सकता है और उन्हें अपने द्वारा रूट कर सकता है।


5
मैं इस पर टिप्पणी करना चाहूंगा: uwsgi में "http", "http-सॉकेट" और "सॉकेट" विकल्प हैं। मैं cgi अजगर लिपियों को कॉल करना चाहता था; "सॉकेट" का जवाब था।
न्यूक्लियरपॉन

Nginx कॉन्फ़िगरेशन फ़ाइल में हम इसका उपयोग करना चाह सकते हैं: / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
मेन्नानोव

3
यह सही समाधान नहीं है। क्या होगा अगर हम सॉक्स को यूनिक्स करना चाहते हैं?
फ़ारसीड

2
@ फ़ारसीड, मैंने अभी वर्णन किया है कि ओपी इस त्रुटि को क्यों देख रहा है। इसे कैसे ठीक करें यह पूरी तरह से आप पर निर्भर है। यह हो सकता है socket = /tmp/myapp.sockया http = 0.0.0.0:8000या जो कुछ भी अपनी आवश्यकताओं पर निर्भर करता है।
पलासती

1
हालांकि यह जवाब कुछ स्थितियों में समस्या को हल कर सकता है, मुझे लगता है कि सामान्य मामले में सही उत्तर नीचे दिए गए @Farsheed द्वारा दिया गया है।
अगस्टो डेस्टेरो

142

HTTP प्रोटोकॉल पर स्विच करने के लिए सही समाधान नहीं है। आपको बस uWSGI सेटिंग्स में बफर साइज बढ़ाने की जरूरत है।

buffer-size=32768

या कमांडलाइन मोड में:

-b 32768

आधिकारिक दस्तावेज से उद्धरण:

डिफ़ॉल्ट रूप से uWSGI प्रत्येक अनुरोध के हेडर के लिए एक बहुत छोटा बफर (4096 बाइट्स) आवंटित करता है। यदि आप अपने लॉग में "अमान्य अनुरोध ब्लॉक आकार" प्राप्त करना शुरू करते हैं, तो इसका मतलब है कि आपको एक बड़े बफर की आवश्यकता हो सकती है। बफर-आकार विकल्प के साथ इसे (65535 तक) बढ़ाएं।

यदि आपको अपने लॉग में अनुरोध ब्लॉक आकार के रूप में '21573' प्राप्त होता है, तो इसका मतलब यह हो सकता है कि आप HTTP प्रोटोकॉल का उपयोग कर रहे हों, उदाहरण के लिए uwsgi प्रोटोकॉल बोलने के साथ। यह मत करो।

यहाँ से: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKIN.html


1
कभी-कभी आपको http प्रोटोकॉल का उपयोग करना पड़ता है, क्योंकि यूनिक्स सॉकेट केवल स्थानीय मशीन पर उपलब्ध होते हैं। ऐसी स्थिति पर विचार करें जब आपके पास कई मशीनें और उनके ऊपर एक अलग बैलेंसर हो - आपको http-socketयहां उपयोग करना होगा ।
पलासती

@Palasaty या एक आईपी सॉकेट और uwsgiप्रोटोकॉल, तो आप भी ओपी के रूप में एक ही त्रुटि प्राप्त कर सकते हैं
आंद्रेई

2
@Palasaty, किसी भी कारण से, बफर-साइज़ को ठीक करने से समस्या ठीक हो जाएगी!
फ़रिश

जब nginx को एक रिवर्स प्रॉक्सी के रूप में उपयोग करना था तो मुझे उपयोग करना था http-socket। किसी और चीज ने "502 बैड गेटवे" दिया, तब भी जब बफर का आकार बढ़ा हुआ था।
हब्रो

जैसा कि उद्धृत प्रलेखन के लिए "यदि आप अपने लॉग में अनुरोध ब्लॉक आकार के रूप में '21573' प्राप्त करते हैं, तो इसका मतलब यह हो सकता है कि आप HTTP प्रोटोकॉल का उपयोग कर रहे हैं उदाहरण के लिए uwsgi प्रोटोकॉल बोलने के साथ बोलने के लिए। ऐसा न करें।" इतना स्पष्ट है कि यह सुझाव गलत है .... साथ ही, @Kartic उपयोगकर्ता पहले ही "-b" विकल्प का उपयोग करने की कोशिश कर चुका है ...
LittleEaster

14

मैं एक ही मुद्दे में भाग गया इसे nginx के तहत चलाने की कोशिश कर रहा था और यहाँ डॉक्स का पालन कर रहा था । यह ध्यान रखना महत्वपूर्ण है कि एक बार जब आप nginx पर स्विच करते हैं, तो आपको यह सुनिश्चित करना होगा कि आप --socket param द्वारा निर्दिष्ट पोर्ट पर ऐप का उपयोग करने की कोशिश नहीं कर रहे हैं, बल्कि nginx.conf में "सुनो" पोर्ट है। यद्यपि आपकी समस्या का वर्णन अलग तरह से किया जाता है, लेकिन शीर्षक मेरे द्वारा बताए गए मुद्दे से बिल्कुल मेल खाता है।


हां मैं उसी चीज में भाग गया। दूसरे शब्दों में, जब मुझे पोर्ट को स्थानीय रूप से कर्ल किया जाता है, तो मुझे एक त्रुटि मिली, जबकि मैं अपने wsgi रिवर्स-प्रॉक्सी के 'लोकेशन' पर सफलतापूर्वक नेविगेट कर सकता हूं, जैसा कि मेरे 'nginx.conf' में निर्दिष्ट है, क्योंकि wsgi सर्वर का प्रोटोकॉल मेरा चुना हुआ सॉकेट wsgi था न कि http
danyamachine

14

मैं इसे ठीक कर सकता था - uprogi =protocol = http जोड़कर


2
मैं इसे uWSGI सेटिंग्स ini फ़ाइल में कैसे सेट कर सकता हूं? मेरा कॉन्फ़िगरेशन आपके सुझाव के साथ काम करता है लेकिन केवल कमांड लाइन में।
हेनरी लिंक्स

2
@ हेनरीलिनक्स, बस protocol=httpअपनी .iniफ़ाइल में जोड़ें
151291

7

यह त्रुटि तब दिखाई जाती है जब uWSGI सर्वर uwsgiप्रोटोकॉल का उपयोग कर रहा होता है और कोई इसे सीधे या वेब ब्राउज़र httpद्वारा प्रोटोकॉल के माध्यम से एक्सेस करने का प्रयास करता है curl। यदि आप कर सकते हैं, httpतो प्रोटोकॉल का उपयोग करने के लिए अपने uWSGI सर्वर को कॉन्फ़िगर करने का प्रयास करें , ताकि आप इसे वेब ब्राउज़र या कर्ल के माध्यम से एक्सेस कर सकें।

यदि आप इसे बदल नहीं सकते (या नहीं चाहते हैं), तो आप 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अगर आपको वेब ब्राउज़र आदि के माध्यम से अपने एप्लिकेशन (एक्सेस) को एक्सेस करने की आवश्यकता है, तो एक साधारण रिवर्स प्रॉक्सी सर्वर भी है। अधिक विस्तारित उत्तर देखें https://stackoverflow.com/a/32893520/179581


2

डॉक्स की एक अन्य टिप्पणी में बताया गया है:

यदि आपको अपने लॉग में अनुरोध ब्लॉक आकार के रूप में '21573' प्राप्त होता है, तो इसका मतलब यह हो सकता है कि आप HTTP प्रोटोकॉल का उपयोग कर रहे हों, उदाहरण के लिए uwsgi प्रोटोकॉल बोलने के साथ। यह मत करो।

यदि आप Nginx का उपयोग कर रहे हैं, तो यह तब होगा जब आपके पास यह कॉन्फ़िगरेशन होगा (या कुछ इसी तरह से विषम):

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

यह HTTP को uWSGI (जो इसे क्रोधी बनाता है) बोल रहा है। इसके बजाय, उपयोग करें:

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

0

आदमी इम हविन एक ही मुद्दा; इसलिए मैंने इसे किया ... UWSGI + DJANGO + NGINX + REACT + का उपयोग करके देखें

1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]

DJANGO_SETTINGS_MODULE = app_plataform.settings env = DJANGO_SETTINGS_MODULE settings.configure ()

chdir = / home / app_plataform होम = / root / app_plataform मॉड्यूल = prometheus_plataform.wsgi: एप्लिकेशन

मास्टर = सही प्रक्रियाएं = 33 बफर-आकार = 32768

सॉकेट = /home/app_plataform/app_plataform.sock chmod-socket = 7x वैक्यूम = सही

2 - नग्नेक्स पर एक गंभीर प्रदर्शन अपग्रेड करें ... उपयोगकर्ता www-data;

कार्यकर्ता_प्रोसेस ऑटो; कार्यकर्ता_प्रोसेस 4; pid /run/nginx.pid; /etc/nginx/modules-enabled/*.conf शामिल करें;

घटनाएँ {कार्यकर्ता_ संपर्क 4092; mult_accept पर; }

http {## UPGRADE CONFIGS

client_body_buffer_size 16K; client_header_buffer_size 16k; client_max_body_size 32 मी; #large_client_header_buffers 2 1k;

client_body_timeout 12; client_header_timeout 12; Keepalive_timeout 15; send_timeout 10; access_log बंद;

## # मूल सेटिंग्स ##

पर भेज देना; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 65; type_hash_max_size 2048; server_tokens बंद;

server_names_hash_bucket_size 64; # server_name_in_redirect बंद;

/etc/nginx/mime.types शामिल करें; default_type एप्लिकेशन / ऑक्टेट-स्ट्रीम;

## # एसएसएल सेटिंग्स ##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # एसएसवी 3 को छोड़ना, रेफरी: POODLE ssl_prefer_server_ciphers;

## # लॉगिंग सेटिंग ##

access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;

## # गज़िप सेटिंग्स ##

gzip पर; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied
समय-सीमा समाप्त हो गई है कोई कैश नहीं-स्टोर निजी वस्तु ; gzip_types text / plain application / x-javascript text / xml text / css application / xml; gzip_vary पर;

#gzip_proxied कोई भी; #gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; #gzip_types text / plain text / css application / json application / javascript text / xml application / xml application / xml + rss text / javascript;

## # वर्चुअल होस्ट की पुष्टि ##

/etc/nginx/conf.d/ .conf शामिल करें ; / etc / nginx / साइट्स-सक्षम / शामिल करें ; }

3 - फिर ... सेवाओं को पुनरारंभ करें या सर्वर को रिबूट करें ...

systemctl पुनरारंभ uwsgi और systemctl पुनरारंभ nginx

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.