ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: upload module: error 413



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 из Висты). Я практически не сомневаюсь в том, что ошибка не в аплоад модуле, а либо в наших кривых руках, либо в высших материях, мне пока неподвластных.





 




Copyright © Lexa Software, 1996-2009.