upload module: error 413
Valery Kholodkov
valery+nginxru at grid.net.ru
Wed Aug 27 02:25:41 MSD 2008
Здравствуйте, Дмитрий!
Ваше письмо почему-то попало в спам, сейчас добавил весь домен в вайтлист.
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
More information about the nginx-ru
mailing list