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
|