upload module: error 413
Dmitry Dedukhin
dedukhin at corp.mail.ru
Wed Aug 27 08:18:05 MSD 2008
> upload_buffer_size не задает вообще никаких лимитов, с ним впринципе
> проблем быть не может
>
> проблема скорее всего в client_max_body_size , а не upload_buffer_size
>
> upload_buffer_size 1m - это много, прикаждом запросе будет выделяться по
> метру памяти, оптимально до 256, у меня 32 мне хорошо. чем меньше это
> число тем больше будет сисколов, ну и наоборот.
>
> location /_upload1 надо объявить internal, иначе в него можно будет
> фейковые посты делать
>
> upload_pass_form_field ".*"; -- это большая дыра. Можно будет постить
> фейковые поля.
>
> 413 я получал изза 404 ответа бэкэнда.
Всем привет.
Дело в том, что даже без указания в конф. файле значения upload_buffer_size
(по умолчанию) происходит ошибка.
Значение client_max_body_size=100m, но при этом попытки загрузить файл
размером _несколько сотен килобайт_ заканчиваются ошибкой 413. До бэкенда
запрос не доходит, это nginx отстреливает 413.
И я ничего не путаю, файл реально оказывается во временной дирректории
полностью обработанным!
Ошибка возникает при вычислении нового content-length после извлечения файла
из пост-запроса.
Если обратиться к исходникам версии 2.0.5, то новая длина ошибочно
вычисляется в цикле на строках 622-623.
Трейсы, вставленные в этот цикл
for(cl = ctx->chain ; cl ; cl = cl->next) {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0
, "///%O last:%p pos:%p %l %l (%O)"
, r->headers_in.content_length_n
, cl->buf->last
, cl->buf->pos
, cl->buf->start
, cl->buf->end
, (cl->buf->last - cl->buf->pos)
);
}
дают следующий лог
2008/08/26 18:45:22 [info] 24281#0: *4 started uploading file "cmd.exe" to
"/tmp/0006049444" (field "upload1", content type
"application/x-msdos-program"), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 finished uploading file "cmd.exe" to
"/tmp/0006049444", client: 195.218.191.18, server: 75.corp.mail.ru, request:
"POST /_upload/ HTTP/1.1", host: "75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///42 last:09B89DFC pos:09B89DD2
163093970 163094012 (700486333931454506), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///82 last:08092198 pos:08092170
134816112 134816152 (700486333931454504), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///103 last:09B8FEB4 pos:09B8FE9F
163118751 163118772 (700486333931454485), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///108 last:080920A4 pos:0809209F
134815903 134815908 (700486333931454469), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///115 last:09B8A10B pos:09B8A104
163094788 163094795 (700486333931454471), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///159 last:09B89DFC pos:09B89DD0
163093968 163094012 (700486333931454508), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///199 last:08092198 pos:08092170
134816112 134816152 (700486333931454504), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///223 last:09B9002C pos:09B90014
163119124 163119148 (700486333931454488), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///228 last:080920A4 pos:0809209F
134815903 134815908 (700486333931454469), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///243 last:09B8A247 pos:09B8A238
163095096 163095111 (700486333931454479), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///287 last:09B89DFC pos:09B89DD0
163093968 163094012 (700486333931454508), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///327 last:08092198 pos:08092170
134816112 134816152 (700486333931454504), client: 195.218.191.18, server:
75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1", host:
"75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///163094035 last:1371446C
pos:09B8A7A0 163096480 326190188 (700486334094548172), client:
195.218.191.18, server: 75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1",
host: "75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///163094040 last:080920A4
pos:0809209F 134815903 134815908 (700486333931454469), client:
195.218.191.18, server: 75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1",
host: "75.corp.mail.ru:8801"
2008/08/26 18:45:28 [info] 24281#0: *4 ///163094046 last:09B8A38E
pos:09B8A388 163095432 163095438 (700486333931454470), client:
195.218.191.18, server: 75.corp.mail.ru, request: "POST /_upload/ HTTP/1.1",
host: "75.corp.mail.ru:8801"
...
Как видите, на определенной итерации цикла происходит резкий скачок суммы и
значение content_length становится нереальным, реальный размер загружаемого
файла был 318976 байт (cmd.exe из Висты).
Я практически не сомневаюсь в том, что ошибка не в аплоад модуле, а либо в
наших кривых руках, либо в высших материях, мне пока неподвластных.
More information about the nginx-ru
mailing list