Nginx upload module (v 2.0.3)

рус анг

Модуль для веб-сервера nginx для процессинга аплоадов multipart/form-data (RFC 1867).

Описание

Модуль разбирает тело запроса и сохраняет все загружаемые файлы в каталог, заданный директивой upload_store. Загружаемые файлы вырезаются из тела запроса и измененный запрос после этого отправляется на location, задаваемый директивой upload_pass, позволяя обрабатывать загрузку файлов произвольным образом. Каждое файловое поле запроса может быть заменено на набор полей, задаваемый директивой upload_set_form_field. Содержимое каждого загруженного файла после этого может быть прочитано из файла, указываемого переменной $upload_tmp_path или файл может быть просто перемещен в итоговое место назначения. Временные файлы, создаваемые модулем, удаляются только в том случае, если при разборе части тела произошла ошибка, либо при ошибке записи на диск.

ВНИМАНИЕ: Модуль использует блокирующую запись, поэтому сервер должен использовать десятки или сотни воркеров в зависимости от нагрузки для предотвращения простоя соединений.

Параметры конфигурации


синтаксис: upload_pass <location>
значение по-умолчанию: нет
строгость: обязательная
контекст: server, location

Указывает location для передачи измененного тела запроса. Файловые поля вырезаются из тела запроса и заменяются полями, задаваемые директивой upload_set_form_field.


синтаксис: upload_store <каталог> [<уровень 1> [<уровень 2> ] ... ]
значение по-умолчанию: нет
строгость: обязательная
контекст: server, location

Указывает каталог в который будут записаны временные файлы. Каталог может быть хэшированный. В этом случае все подкаталоги должны быть созданы заранее.


синтаксис: upload_store_access <режим доступа>
значение по-умолчанию: user:rw
строгость: необязательная
контекст: server, location

Указывает режим доступа с которым будут созданы временные файлы.


синтаксис: upload_set_form_field <имя> <значение>
значение по-умолчанию: нет
строгость: необязательная
контекст: server, location

Задает поля формы, которые будут сгенерированы для каждого загружаемого файла в теле запроса, передаваемого бакэнду. Как имя так и значение могут содержать переменные nginx, а так же следующие специальные переменные:

Эти переменные доступны только во время обработки соответствующей части тела запроса и не могут быть, например, записаны в лог.

пример:
upload_set_form_field $upload_field_name.name "$upload_file_name";
upload_set_form_field $upload_field_name.content_type "$upload_content_type";
upload_set_form_field $upload_field_name.path "$upload_tmp_path";
		

синтаксис: upload_pass_form_field <регулярное выражение>
значение по-умолчанию: нет
строгость: необязательная
контекст: location

Задает регулярное выражение для имен полей, которые будут пропущены от клиента к бакэнду. Эта директива может повторяться несколько для одного location'а. Поле будет передано бакэнду как только его имя совпадет с первым регулярным выражением. Для сред, где недоступен PCRE эта директива задает точное имя поля для передачи бакэнду. Если директива опущена, то ни одно поле не будет передано бакэнду из оригинального запроса.

пример:
upload_pass_form_field "^submit$|^description$";

Для сред, где недоступен PCRE:

upload_pass_form_field "submit";
upload_pass_form_field "description";
		

синтаксис: upload_buffer_size <длина>
значение по-умолчанию: размер страницы памяти в байтах
строгость: необязательная
контекст: server, location

Размер буфера, который будет использован для записи данных на диск.


синтаксис: upload_max_part_header_len <длина>
значение по-умолчанию: 512
строгость: необязательная
контекст: server, location

Указывает максимальную длину заголовка части тела. Определяет размер буфера, который будет использован для аккумулирования этих заголовков.


Пример конфигурации

server {
    client_max_body_size 100m;
    listen       80;
    server_name  localhost;

    # Upload form should be submitted to this location
    location /upload {
        # Pass altered request body to this location
        upload_pass   /test;

        # Store files to this location
        upload_store /tmp;

        # Set specified fields in request body
        upload_set_form_field $upload_field_name.name "$upload_file_name";
        upload_set_form_field $upload_field_name.content_type "$upload_content_type";
        upload_set_form_field $upload_field_name.path "$upload_tmp_path";

        # Pass matching fields from client to backend
        upload_pass_form_field "^submit$|^description$";
    }

    # Pass altered request body to a backend
    location /test {
        proxy_pass   http://localhost:8080;
    }
}
        

Пример формы для загрузки файлов

<html>
<head>
<title>Test upload</title>
</head>
<body>
<h2>Select files to upload</h2>
<form name="upload" method="POST" enctype="multipart/form-data" action="/upload">
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="file" name="file3"><br>
<input type="file" name="file4"><br>
<input type="file" name="file5"><br>
<input type="file" name="file6"><br>
<input type="submit" name="submit" value="Upload">
<input type="hidden" name="test" value="value">
</form>
</body>
</html>
        

Скачать

Последняя версия 2.0.3: tar.gz zip MD5 SHA1
Версия 2.0.2: tar.gz zip MD5 SHA1
или перейти в каталог загрузки

Репозиторий

http://svn.myau.su/

Документация более ранних версий

Версия 2.0.2

Как использовать

Скачать исходники по ссылке выше.

tar xvzf nginx_upload_module-2.0.3.tar.gz

Сконфигурировать nginx с дополнительным модулем:

cd <путь к исходникам nginx>
./configure --add-module=<путь к исходникам модуля>
make
make install

Nginx

nginx -- это веб-сервер разработанный Игорем Сысоевым.

Лицензия

Описанный модуль является дополнением к веб-серверу nginx и является самостоятельным продуктом. Лицензия описанного модуля BSD Вы должны были получить копию лицензии вместе с исходными кодами модуля.

Связаться с автором

Valery Kholodkov valery+nginx@grid.net.ru
Пожалуйста, используйте расширение адреса при составлении письма мне.


Copyright (C) 2006, 2008 Valery Kholodkov
Отметки о копирайте модуля см. в исходных кодах модуля.