uwsgi 잘못된 요청 블록 크기


142

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

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

이 오류가 발생합니다

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

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


1
버퍼 크기는 여전히 기본값 (4096)이므로 올바른 인스턴스에서 작업하고 있는지 확인하십시오. "-b 32k"를 쓸 수도 있습니다. 또한 일부 구성 파일에이 옵션 (buffer-size)이 설정되어 있지 않은지 확인하십시오.
zakinster

구성 파일이 없습니다. 여전히 작동하지 않습니다 :(
Kartik Rokde

8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html은 당신은 단지 프로세스 매니저, 상속되지 황제로 지정된이 옵션에 추가하여, http 프로토콜을 사용하여 uwsgi 소켓에 연결하려고
roberto

@zakinster 어떤 이유로 든 값 형식이 k작동하지 않았습니다. 전체 번호를 제공해야했습니다. 여기에서 사용할 수있는 형식에 대한 포인터를 찾을 수 없습니다.
famousgarkin

답변:


207

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


5
uwsgi에는 "http", "http-socket"및 "socket"옵션이 있습니다. cgi python 스크립트를 호출하고 싶었습니다. "소켓"이 답이었습니다.
NuclearPeon

Nginx 설정 파일에서 우리는 이것을 사용할 수 있습니다 : include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov

3
올바른 해결책이 아닙니다. 소켓을 유닉스 화하려면 어떻게해야합니까?
Farsheed

2
@Farsheed, 방금 OP 가이 오류를 보는 이유를 설명했습니다. 그것을 고치는 방법은 전적으로 당신에게 달려 있습니다. 그것은있을 수 있습니다 socket = /tmp/myapp.sock또는 http = 0.0.0.0:8000무엇이든 필요에 따라 또는.
팔라 티

1
이 답변은 일부 상황에서 문제를 해결할 수 있지만 일반적인 경우의 정답은 아래 @Farsheed가 제공 한 답변이라고 생각합니다.
Augusto Destrero

142

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

buffer-size=32768

또는 명령 행 모드에서 :

-b 32768

공식 문서에서 인용 :

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

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

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


1
때때로 당신은 유닉스 소켓이 로컬 컴퓨터에서만 사용할 수 있기 때문에, HTTP 프로토콜을 사용하도록. 여러 대의 기계와 별도의 밸런서가있는 상황을 고려 http-socket하십시오. 여기 에서 사용해야 합니다.
팔라 티

@Palasaty 또는 IP 소켓 및 uwsgi프로토콜을 사용하면 OP와 동일한 오류가 발생할 수 있습니다.
Andrei

2
@Palasaty, 어떤 이유로 든 버퍼 크기를 수정하면 문제가 해결됩니다!
Farsheed

nginx를 리버스 프록시로 사용할 때 나는 사용해야했습니다 http-socket. 버퍼 크기가 증가한 경우에도 "502 Bad Gateway"가 발생했습니다.
Hubro

인용 된 문서에 대해서는 "로그에서 요청 블록 크기로 '21573'을 수신하면 HTTP 프로토콜을 사용하여 uwsgi 프로토콜을 말하는 인스턴스와 통신하고 있음을 의미 할 수 있습니다. 이렇게하지 마십시오." @Kartic 사용자는 이미 "-b"옵션을 사용하려고했습니다 ...
LittleEaster

14

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


예, 같은 일이 발생했습니다. 즉, 포트를 로컬로 말릴 때 오류가 발생하는 반면 wsgi 서버의 프로토콜은`nginx.conf '에 지정된대로 wsgi 리버스 프록시의'위치 '로 성공적으로 탐색 할 수있었습니다. 내가 선택한 소켓은 wsgi이고 http가 아닙니다.
danyamachine

14

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


2
uWSGI 설정 ini 파일에서 어떻게 설정할 수 있습니까? 내 구성은 제안과 함께 작동하지만 명령 줄에서만 작동합니다.
Henry Lynx

2
@HenryLynx, 그냥 추가 protocol=http사용자에게 .ini파일
151291

7

이 오류는 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


2

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

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

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

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

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

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 : 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.