ПРОЕКТЫ 


  АРХИВ 


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



Здравствуйте, Дмитрий!

Ваше письмо почему-то попало в спам, сейчас добавил весь домен в вайтлист.

1) Вы наступаете на лимит директивы client_max_body_size, а не upload_buffer_size. upload_buffer_size вообще ни каких лимитов не задает. Из лога очевидно, что тело запроса составляет ~800 мегабайт, а в файле конфигурации ограничение -- 100 мегабайт. Размер загружаемого файла при этом непосредственной роли не играет; 2) upload_buffer_size 1m -- это много. При каждом запросе на аплоад будет выделяться 1 мегабайт памяти. Рекомендуемые значения -- до 256k. В будущем этой директивы вообще не будет, а будут использоваться клиентские буферы; 3) location /_upload1 надо объявить internal, иначе в него можно будет делать фэйковые запросы извне; 4) upload_pass_form_field ".*" -- это большая дыра. Клиенты смогут постить фэйковые поля. Нужно тщательно перечислить все необходимые поля формы; 5) Конструкция, при которой в первом аргументе директив upload_set_form_field и upload_aggregate_form_field нет переменных, редко применима (хотя и возможна в версии 2.0.5), поскольку нет возможности определить в каком выходном файле какой файл формы записан.

> Точнее, во временную дирректорию они все-таки попадают в нормальном
> виде, но браузеру возвращается ошибка 413.

Здесь Вы что-то путаете. При выдаче 413 тело запроса отбрасывается.

Dmitry Dedukhin wrote:
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       _aaaaaa.bbbb_.ru:8801;
        server_name  _aaaaaa.bbbb_.ru;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host      $Host;
        location / {
proxy_pass http://aaaaaa.bbbb.ru:80;
        }
        client_max_body_size    100m;
        client_body_buffer_size 5m;
        location /_upload/ {
            upload_buffer_size     1m;
            upload_pass /_upload1;
            upload_store /var/tmp/upload;
            upload_set_form_field nginx_upload_filename "$upload_file_name";
upload_set_form_field nginx_upload_tmpfilename "$upload_tmp_path"; upload_aggregate_form_field nginx_upload_filesize "$upload_file_size";
            upload_pass_form_field ".*";
        }
        location /_upload1 {
            proxy_pass http://aaaaaa.bbbb.ru:80/cgi-bin/upload;
        }
    }
}
OS: GNU/Linux, upload module v 2.0.5 Проблема: не получается загружать файлы размером больше, чем выставлено значение upload_buffer_size. Точнее, во временную дирректорию они все-таки попадают в нормальном виде, но браузеру возвращается ошибка 413. Если загружать файл размером меньшим чем значение upload_buffer_size - то все нормально. При возникновении ошибки в логе nginx видим запись 2008/08/26 14:05:55 [error] 26012#0: *1 client intended to send too large body: 808793012 bytes, client: xxx.xxx.xxx.x, server: _aaaaaa.bbbb_.ru, request: "POST /_upload/ HTTP/1.1", host: "_aaaaaa.bbbb_.ru:8801" Хотя файл загружали размером несколько сотен килобайт...
Где грабли?


--
Regards,
Valery Kholodkov



 




Copyright © Lexa Software, 1996-2009.