2015-12-21 12 views
10

Đây là vấn đề:Tôi làm cách nào để định cấu hình máy chủ uWsgi của mình để bảo vệ chống lại Lỗi Bài đăng Không đọc được?

File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/six.py", line 535, in next 
    return type(self).__next__(self) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/http/multipartparser.py", line 344, in __next__ 
    output = next(self._producer) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/six.py", line 535, in next 
    return type(self).__next__(self) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/http/multipartparser.py", line 406, in __next__ 
    data = self.flo.read(self.chunk_size) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/http/request.py", line 267, in read 
    six.reraise(UnreadablePostError, UnreadablePostError(*e.args), sys.exc_info()[2]) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/http/request.py", line 265, in read 
    return self._stream.read(*args, **kwargs) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 59, in read 
    result = self.buffer + self._read_limited(size - len(self.buffer)) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 47, in _read_limited 
    result = self.stream.read(size) 
UnreadablePostError: error during read(65536) on wsgi.input 

cấu hình hiện tại của tôi đọc như thế này:

[uwsgi] 
http-socket = :$(PORT) 
master = true 
processes = 4 
die-on-term = true 
module = app.wsgi:application 
memory-report = true 
chunked-input-limit = 25000000 
chunked-input-timeout = 300 
socket-timeout = 300 

Python: 2,7 .x | uWsgi: 2,0 .10

Và để làm được vấn đề thậm chí cụ thể hơn, điều này xảy ra khi tôi xử lý hình ảnh đồng bộ cùng với một tải lên hình ảnh. Tôi biết rằng lý tưởng tôi phải làm điều này bằng cách sử dụng Celery, nhưng vì một yêu cầu kinh doanh tôi không thể làm điều đó. Vì vậy, cần phải cấu hình thời gian chờ theo cách nó cho phép tôi chấp nhận một tệp hình ảnh lớn, xử lý nó và sau đó trả về phản hồi.

Mọi loại ánh sáng trên câu hỏi sẽ cực kỳ hữu ích. Cảm ơn bạn.

+1

Vui lòng đăng phiên bản của uwsgi và python bạn đang sử dụng. –

+0

Bạn đã cố gắng đặt 'buffer-size = 65536' trong tập tin cấu hình –

+0

Điều này có xảy ra với yêu cầu * every * không? Bạn có thể cung cấp một ví dụ tối thiểu để tái tạo vấn đề? – Phillip

Trả lời

1

Lỗi được trích dẫn trong mô tả không phải là hình ảnh đầy đủ; phần có liên quan là cụm từ này rất nhiều:

[uwsgi-body-read] Error reading 65536 bytes … message: Client closed connection uwsgi_response_write_body_do() TIMEOUT 

lỗi cụ thể này đã được nêu ra bởi vì (có lẽ hầu hết) khách hàng, hoặc một cái gì đó giữa nó và uWSGI, hủy bỏ yêu cầu.

Có một số nguyên nhân có thể cho điều này:

  • Một khách hàng buggy
  • Mạng cấp lọc (DPI hoặc một số tường lửa cấu hình sai)
  • Bugs/sai trong máy chủ trước uWSGI

Người cuối cùng được bao phủ trong the uWSGI docs:

Nếu bạn dự định đặt uWSGI phía sau proxy/bộ định tuyến, hãy đảm bảo rằng nó hỗ trợ các yêu cầu đầu vào được chunked (hoặc thường yêu cầu HTTP thô).

Để xác minh vấn đề của bạn thực sự không có trong uWSGI, hãy thử tải lên tệp qua bảng điều khiển trên máy chủ lưu trữ ứng dụng uWSGI của bạn. Truy cập trực tiếp điểm cuối HTTP, bỏ qua nginx/haproxy và bạn bè.

Các vấn đề liên quan