Подтвердить что ты не робот

Nginx 1.5+ загрузка файлов - лучшие практики

Я хочу загрузить файлы через мой сервер nginx. В настоящее время я запускаю nginx-1.4.6 и желаю перейти к последней стабильной nginx-1.5* по мере необходимости.

Любимым сообществом является Валерий Холодков nginx-upload-module, найденный здесь. К сожалению, Валерий больше не поддерживает этот модуль, подробности здесь. Начиная с nginx-1.3.9 модуль работает частично или вообще не работает.

Я скомпилировал nginx-upload-module в nginx-1.4.6 и получил ошибку (Client cxn closed), которая кажется исправленной в nginx-1.5.3 ревизии. Однако я применил патч и не повезло.

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

Когда я погружаюсь во второе и четвертое решения (я предпочитаю не устанавливать lua зависимость, но я могу), я подумал, что уместно спросить это сообщество:

Каковы текущие рекомендации по загрузке файлов с помощью nginx-1.5+?

Добавлю, что я загружаю файлы из команды python POST и пытаюсь протестировать с помощью curl. PHP не входит в мой технический стек.

4b9b3361

Ответ 1

Возможно, вы можете использовать perl, если вам не нравятся php или lua.

http://nginx.org/en/docs/http/ngx_http_perl_module.html#methods

$r- > has_request_body (обработчик)

Но из коробки nginx не является инструментом для сохранения полученного почтового запроса и его сохранения.

Возможно, uWSGI (https://uwsgi-docs.readthedocs.io/en/latest/) - лучший способ пойти с http-socket https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html и приложение python.

Ответ 2

Там хорошая статья о твоих сомнениях. https://coderwall.com/p/swgfvw

Я попробовал nginx-upload-module. Это хорошее решение, но, похоже, это не работает для новых версий. Там также есть некоторые модули в Lua, которые могут вам помочь. В моем случае у меня была логика логичности, которую я реализовал в своем приложении.

Имейте в виду, что большой проблемой для загрузки файлов является FILER. Это ботленка: много испытаний на нагрузку, которые я сделал, показали мне этот вывод.

Ответ 3

Nginx поддерживает метод POST, где вы можете использовать большие параметры. Клиент может использовать php или jsp для использования метода post для создания запроса на сервер nginx.

Ответ 4

Я понимаю, что это очень старый вопрос, но он на первой странице поиска Google для "модуля загрузки nginx", и это первый результат, поэтому в случае, если это поможет кому-то еще, сталкивающемуся с этим вопросом:

Я использую модуль nginx-upload для nginx 1.10.3. Как упоминается в первоначальном вопросе, Валерий Холодков больше не поддерживает модуль. Однако есть несколько разных вилок, и другие люди модифицировали его для работы с новыми версиями nginx.

Этот запрос на перенос - это то, что я использовал для компиляции nginx с модулем загрузки.

https://github.com/vkholodkov/nginx-upload-module/pull/88

Модуль загрузки, IMO, по-прежнему остается лучшим решением, если вы используете nginx и php-fpm. Этот модуль позволяет полностью загружать загружаемые файлы nginx до тех пор, пока они не будут завершены, а затем выполнение обработки загрузки будет передано на PHP. Таким образом, процессы php-fpm не будут создавать узкое место, когда ваши пользователи загружают много файлов.

Ответ 5

Просто быстрый проект, но попробуйте это...

Upload.php
if (isset($_FILES['dlc_file']) && !empty($_FILES['dlc_file'])) {
    if (empty($_FILES['dlc_file']['name']) === true) {
        echo = "Please choose a file to upload";
    } else {
        $allowed = array('zip', 'rar', 'gzip', 'tar', '7z', 'png', 'jpg');

        $file_name = $_FILES['dlc_file']['name'];
        $file_extn = strtolower(end(explode('.', $file_name)));
        $file_temp = $_FILES['dlc_file']['tmp_name'];

        if (in_array($file_extn, $allowed) === true) {
            $file_path = 'dlc/' . substr(md5(time()), 0, 10) . '.' . $file_extn;
            move_uploaded_file($file_temp, $file_path);
            echo = "Successfully uploaded $file_name";
        } else {
            $file_types = implode(', ', $allowed);
            echo "File type is not allowed, Allowed file types $file_types";
        }
    }
}

index.php
<form action="upload.php" method="post" enctype="multipart/form-data>
    <input type="file" name="dlc_file">
    <input type="submit" name="submit" value="Upload">
</form>