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