[uwsgi] uwsgi 잘못된 요청 블록 크기

황제 모드에서 uwsgi를 실행 중입니다.

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

이 오류가 발생합니다

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

무엇을해야합니까 ?? 나는 또한 시도했다 -b 32768



답변

일부 자습서를 따르는 동안 동일한 문제가 발생했습니다. 문제는 옵션을 설정했다는 것입니다.socket = 0.0.0.0:8000 대신 것입니다 http = 0.0.0.0:8000.
socket옵션은 일부 타사 라우터 (예 : nginx)와 함께 사용되는 반면 http옵션이 설정되면 uwsgi는 들어오는 HTTP 요청을 수락하고 자체적으로 라우팅 할 수 있습니다.


답변

올바른 해결책은 HTTP 프로토콜로 전환하지 않는 것입니다. uWSGI 설정에서 버퍼 크기를 늘리면됩니다.

buffer-size=32768

또는 명령 행 모드에서 :

-b 32768

공식 문서에서 인용 :

기본적으로 uWSGI는 각 요청의 헤더에 대해 매우 작은 버퍼 (4096 바이트)를 할당합니다. 로그에 “잘못된 요청 블록 크기”를 받기 시작하면 더 큰 버퍼가 필요할 수 있습니다. buffer-size 옵션을 사용하여 늘리십시오 (최대 65535).

로그에서 요청 블록 크기로 ‘21573’을 수신하면 HTTP 프로토콜을 사용하여 uwsgi 프로토콜을 말하는 인스턴스와 통신하고 있음을 의미 할 수 있습니다. 이러지 마

여기에서 : https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html


답변

나는 nginx에서 실행하려고하는 동일한 문제에 부딪 쳤으며 여기 에서 문서를 따르고 있었습니다 . 일단 nginx로 전환하면 –socket 매개 변수로 지정된 포트에서 앱에 액세스하려고하지 않고 nginx.conf의 “listen”포트에 액세스하려고 시도해야합니다. 문제가 다르게 설명되었지만 제목은 내가 가진 문제와 정확히 일치합니다.


답변

uwsgi에 –protocol = http를 추가하여 문제를 해결할 수 있습니다.


답변

이 오류는 uWSGI 서버가 uwsgi프로토콜을 사용 중이고 http프로토콜 curl또는 웹 브라우저 를 통해 프로토콜을 통해 직접 액세스하려고 할 때 표시됩니다. 가능하면 uWSGI 서버를 사용하도록 구성하십시오.http 프로토콜 웹 브라우저 또는 curl을 통해 액세스하십시오.

변경할 수 없거나 변경하지 않으려는 경우 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 : //.com/a/32893520/179581


답변

문서의 다른 의견에서 지적했듯이 :

로그에서 요청 블록 크기로 ‘21573’을 수신하면 HTTP 프로토콜을 사용하여 uwsgi 프로토콜을 말하는 인스턴스와 통신하고 있음을 의미 할 수 있습니다. 이러지 마

Nginx를 사용하는 경우,이 구성 (또는 유사하게 이상한 것)이있는 경우에 발생합니다.

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

이것은 uWSGI에 HTTP를 말하고 있습니다. 대신 다음을 사용하십시오.

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


답변

남자는 같은 문제를 가지고있다. 그래서 나는 … 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 : application

마스터 = 실제 프로세스 = 33 버퍼 크기 = 32768

소켓 = /home/app_plataform/app_plataform.sock chmod-socket = 777 진공 = true

2-nginx … user www-data에서 심각한 성능 업그레이드를하십시오.

worker_processes 자동; worker_processes 4; pid /run/nginx.pid; /etc/nginx/modules-enabled/*.conf를 포함하십시오;

이벤트 {worker_connections 4092; multi_accept on; }

http {## 업그레이드 구성

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

client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; access_log off;

## # 기본 설정 ##

sendfile on; tcp_nopush 켜짐; tcp_nodelay 켜짐; #keepalive_timeout 65; types_hash_max_size 2048; server_tokens 해제;

server_names_hash_bucket_size 64; # server_name_in_redirect 꺼짐;

/etc/nginx/mime.types를 포함하십시오; default_type 응용 프로그램 / 옥텟 스트림;

## # SSL 설정 ##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv3 삭제, 참조 : POODLE ssl_prefer_server_ciphers on;

## # 로깅 설정 ##

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

## # Gzip 설정 ##

에 gzip; gzip_comp_level 2; gzip_min_ 길이 1000; gzip_proxied
만료 된 no-cache no-store 개인 인증; gzip_types text / plain application / x-javascript text / xml text / css application / xml; gzip_vary on;

#gzip_proxied any; #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 / sites-enabled / 포함 ; }

3-… 서비스 또는 리 보트 서버 재시작 …

systemctl 재시작 uwsgi & systemctl 재시작 nginx