Ситуация следующая:
- Клиент не знает размера запроса и ставит максимальное число в Content-Length.
- Nginx работает как прокси и начинает принимать запрос
- У клиента кончаются данные и он закрывает соединение.
- Nginx не получает весь размер из Content-Length и возвращает 40x ошибку.
Запрос клиента:
PUT http://192.168.1.1/192.168.1.2/path/file.wav HTTP/1.1
Host: 192.168.1.1
Content-Length: 864000000
Content-Type: audio/wav
Expect: 100-continue
Возможно ли настроить/пропатчить nginx так, чтобы он считал данные успешно принятыми, если их размер не равен Content-Length? Клиента изменить нельзя. Я пробовал изменить функцию ngx_http_do_read_client_request_body() и убрать возврат ошибки при c->recv()==0 (записав при этом в rb->rest = 0), но это вызвало проблемы с последующей передачей запроса апстриму:
2011/10/06 08:37:30 [debug] 28656#0: *27 http upstream recv(): 0 (115: Operation now in progress)
2011/10/06 08:37:30 [info] 28656#0: *27 client closed prematurely connection, so upstream connection is closed too while connecting to upstream, clien
2011/10/06 08:37:30 [debug] 28656#0: *27 finalize http upstream request: 499
Апстрим - это Apache, на него ничего не доходит. Напрямую без nginx все работает.