uwsgi kích thước khối yêu cầu không hợp lệ


142

Tôi đang chạy uwsgi trong chế độ hoàng đế

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

và nhận được lỗi này

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

Phải làm sao đây ?? Tôi cũng đã thử -b 32768


1
Kích thước bộ đệm rõ ràng vẫn là giá trị mặc định (4096), đảm bảo bạn đang làm việc đúng. Bạn cũng có thể viết "-b 32k". Ngoài ra, hãy đảm bảo tùy chọn này (kích thước bộ đệm) chưa được đặt trong một số tệp cấu hình.
zakinster

Không có tập tin cấu hình. Vẫn không hoạt động :(
Kartik Rokde

8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html bạn đang cố gắng kết nối với ổ cắm uwsgi bằng giao thức http, ngoài ra, các tùy chọn được chỉ định cho hoàng đế không được kế thừa, nó chỉ là trình quản lý quy trình
roberto

@zakinster Vì một số lý do, định dạng giá trị kkhông phù hợp với tôi. Phải cung cấp đầy đủ số lượng. Không thể tìm thấy bất kỳ con trỏ trên các định dạng bạn có thể sử dụng ở đây.
famousgarkin 4/03/2015

Câu trả lời:


207

Tôi cũng gặp vấn đề tương tự trong khi làm theo một số hướng dẫn. Vấn đề là tôi đặt tùy chọn socket = 0.0.0.0:8000thay vì http = 0.0.0.0:8000. sockettùy chọn dự định được sử dụng với một số bộ định tuyến của bên thứ ba (ví dụ nginx), trong khi khi httptùy chọn được đặt, uwsgi có thể chấp nhận các yêu cầu HTTP đến và tự định tuyến chúng.


5
Tôi chỉ muốn bình luận về điều này: uwsgi có các tùy chọn "http", "http-socket" và "socket". Tôi muốn gọi kịch bản cgi python; "ổ cắm" là câu trả lời.
NuclePeon

Trong tệp cấu hình Nginx, chúng tôi có thể muốn sử dụng tệp này: bao gồm / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov

3
Đó không phải là giải pháp chính xác. Điều gì nếu chúng ta muốn unix socket?
Farsheed

2
@Farsheed, tôi vừa mô tả lý do tại sao OP thấy lỗi này. Làm thế nào để khắc phục nó là hoàn toàn tùy thuộc vào bạn. Nó có thể socket = /tmp/myapp.sockhoặc http = 0.0.0.0:8000bất cứ điều gì tùy thuộc vào nhu cầu của bạn.
Palasaty

1
Mặc dù câu trả lời này có thể giải quyết vấn đề trong một số tình huống, tôi nghĩ rằng câu trả lời đúng trong trường hợp chung là câu trả lời được cung cấp bởi @Farsheed dưới đây.
Augusto Destrero

142

Giải pháp chính xác là không chuyển sang giao thức HTTP. Bạn chỉ cần tăng kích thước bộ đệm trong cài đặt uWSGI.

buffer-size=32768

hoặc trong chế độ dòng lệnh:

-b 32768

Trích dẫn từ tài liệu chính thức:

Theo mặc định, uWSGI phân bổ một bộ đệm rất nhỏ (4096 byte) cho các tiêu đề của mỗi yêu cầu. Nếu bạn bắt đầu nhận được kích thước khối yêu cầu không hợp lệ, trong các bản ghi của bạn, điều đó có nghĩa là bạn cần một bộ đệm lớn hơn. Tăng nó (lên tới 65535) với tùy chọn kích thước bộ đệm.

Nếu bạn nhận được '21573' là kích thước khối yêu cầu trong nhật ký của mình, điều đó có thể có nghĩa là bạn đang sử dụng giao thức HTTP để nói chuyện với một cá thể nói giao thức uwsgi. Đừng làm điều này.

Từ đây: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html


1
Đôi khi bạn phải sử dụng giao thức http, vì ổ cắm unix chỉ có sẵn trên máy cục bộ. Hãy xem xét một tình huống khi bạn có một số máy móc và bộ cân bằng riêng biệt trên đầu chúng - bạn phải sử dụng http-socketở đây.
Palasaty

@Palasaty hoặc một ổ cắm IP và uwsgigiao thức, sau đó bạn cũng có thể gặp lỗi tương tự như OP
Andrei

2
@Palasaty, trong mọi nguyên nhân, sửa kích thước bộ đệm sẽ khắc phục vấn đề!
Farsheed

Khi sử dụng nginx làm proxy ngược tôi phải sử dụng http-socket. Bất cứ điều gì khác đã cho "502 Bad Gateway", ngay cả khi kích thước bộ đệm được tăng lên.
Hubro

Đối với tài liệu được trích dẫn "Nếu bạn nhận được '21573' là kích thước khối yêu cầu trong nhật ký của mình, điều đó có nghĩa là bạn đang sử dụng giao thức HTTP để nói chuyện với một cá thể nói giao thức uwsgi. Đừng làm điều này." Vì vậy, rõ ràng là đề xuất sai .... Ngoài ra, người dùng @Kartic đã thử sử dụng tùy chọn "-b" ...
LittleEaster

14

Tôi gặp vấn đề tương tự khi cố gắng chạy nó dưới nginx và đang theo dõi các tài liệu ở đây . Điều quan trọng cần lưu ý là một khi bạn chuyển sang nginx, bạn phải đảm bảo rằng bạn không cố truy cập ứng dụng trên cổng được chỉ định bởi --socket param mà là cổng "lắng nghe" trong nginx.conf. Mặc dù vấn đề của bạn được mô tả khác đi, tiêu đề khớp chính xác với vấn đề tôi gặp phải.


vâng tôi gặp phải điều tương tự nói cách khác, tôi đã gặp lỗi khi cuộn cổng cục bộ, trong khi tôi có thể điều hướng thành công đến 'vị trí' của proxy ngược wsgi của tôi như được chỉ định trong `nginx.conf 'của tôi, vì giao thức của máy chủ wsgi trên ổ cắm tôi chọn là wsgi chứ không phải http
danyamachine

14

Tôi có thể sửa nó bằng cách thêm --protatio = http vào uwsgi


2
Làm cách nào tôi có thể thiết lập cài đặt này trong tệp cài đặt uWSGI? Cấu hình của tôi hoạt động với đề xuất của bạn nhưng chỉ trong dòng lệnh.
Henry Lynx

2
@HenryLynx, chỉ cần thêm protocol=httpvào .initệp của bạn
151291

7

Lỗi này được hiển thị khi máy chủ uWSGI đang sử dụng uwsgigiao thức và người ta cố gắng truy cập nó thông qua httpgiao thức bằng curlhoặc trình duyệt web trực tiếp. Nếu bạn có thể, hãy thử định cấu hình máy chủ uWSGI của bạn để sử dụng httpgiao thức, để bạn có thể truy cập nó thông qua trình duyệt web hoặc cuộn tròn.

Trong trường hợp bạn không thể (hoặc không muốn) thay đổi nó, bạn có thể sử dụng proxy ngược (ví dụ nginx) trước máy chủ uWSGI cục bộ hoặc từ xa, xem https://uwsgi-docs.readthedocs.org/en/latest/Nginx .html

Nếu cảm thấy quá nhiều công việc, hãy thử dùng uwsgi-toolsgói python:

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030

Ngoài ra còn có một máy chủ proxy đảo ngược đơn giản uwsgi_proxynếu bạn cần truy cập (các) ứng dụng của mình thông qua trình duyệt web, v.v ... Xem câu trả lời mở rộng hơn https://stackoverflow.com/a/32893520/179581


2

Như đã chỉ ra trong một nhận xét khác từ các tài liệu:

Nếu bạn nhận được '21573' là kích thước khối yêu cầu trong nhật ký của mình, điều đó có thể có nghĩa là bạn đang sử dụng giao thức HTTP để nói chuyện với một cá thể nói giao thức uwsgi. Đừng làm điều này.

Nếu bạn đang sử dụng Nginx, điều này sẽ xảy ra nếu bạn có cấu hình này (hoặc một cái gì đó tương tự lẻ):

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

đây là nói HTTP với uWSGI (làm cho nó khó chịu). Thay vào đó, sử dụng:

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

0

người đàn ông im havin cùng một vấn đề; vì vậy tôi đã làm nó ... nhìn bằng cách sử dụng UWSGI + DJANGO + NGINX + REACT +

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

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

chdir = / home / app_plataform home = / root / app_plataform module = prometheus_plataform.wsgi: ứng dụng

master = true process = 33 buffer-size = 32768

ổ cắm = /home/app_plataform/app_plataform.sock chmod-socket = 777 chân không = true

2 - thực hiện nâng cấp hiệu suất nghiêm trọng trên nginx ... dữ liệu www của người dùng;

worker_ Processes auto; worker_ Processes 4; pid /run/nginx.pid; bao gồm /etc/nginx/modules-enables/*.conf;

sự kiện {worker_connections 4092; đa_accept trên; }

http {## CẤU HÌNH NÂNG CẤP

client_body_buffer_size 16K; client_header_buffer_size 16k; khách hàng_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 tắt;

## # Cài đặt cơ bản ##

sendfile trên; tcp_nopush trên; tcp_nodelay trên; #keepalive_timeout 65; loại_hash_max_size 2048; server_tokens tắt;

máy chủ_names_hash_bucket_size 64; # server_name_in_redirect tắt;

bao gồm /etc/nginx/mime.types; ứng dụng default_type / octet-stream;

## # Cài đặt SSL ##

ssl_prot Protocol TLSv1 TLSv1.1 TLSv1.2; # Thả SSLv3, ref: POODLE ssl_prefer_server_ciphers trên;

## # Cài đặt ghi nhật ký ##

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

## # Cài đặt Gzip ##

gzip trên; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied
đã hết hạn bộ nhớ riêng không lưu trữ bộ nhớ cache; gzip_types văn bản / ứng dụng đơn giản / văn bản x-javascript / xml văn bản / ứng dụng css / xml; gzip_vary trên;

#gzip_proxied bất kỳ; #gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; #gzip_types văn bản / văn bản thuần túy / ứng dụng css / ứng dụng json / văn bản javascript / ứng dụng xml / ứng dụng xml / xml + văn bản rss / javascript;

## # Liên kết máy chủ ảo ##

bao gồm /etc/nginx/conf.d/ .conf; bao gồm / etc / nginx / site-enable / ; }

3 - sau đó ... khởi động lại dịch vụ hoặc máy chủ reebot ...

systemctl khởi động lại uwsgi & systemctl khởi động lại nginx

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.