Перейти к содержанию

upload-progress: Модуль отслеживания прогресса загрузки NGINX

Установка Debian/Ubuntu

Эти документы применимы к пакету APT nginx-module-upload-progress, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-upload-progress
Показать дистрибутивы и архитектуры
| Distro   | Suite             | Component   | Architectures   |
|----------|-------------------|-------------|-----------------|
| debian   | bookworm          | main        | amd64, arm64    |
| debian   | bookworm-mainline | main        | amd64, arm64    |
| debian   | trixie            | main        | amd64, arm64    |
| debian   | trixie-mainline   | main        | amd64, arm64    |
| ubuntu   | focal             | main        | amd64, arm64    |
| ubuntu   | focal-mainline    | main        | amd64, arm64    |
| ubuntu   | jammy             | main        | amd64, arm64    |
| ubuntu   | jammy-mainline    | main        | amd64, arm64    |
| ubuntu   | noble             | main        | amd64, arm64    |
| ubuntu   | noble-mainline    | main        | amd64, arm64    |

Введение

nginx_uploadprogress_module является реализацией системы отслеживания прогресса загрузки, которая мониторит POST-загрузки по RFC1867, когда они передаются на вышестоящие серверы.

Он работает, отслеживая загрузки, проксируемые Nginx на вышестоящие серверы, без анализа загруженного контента и предлагает веб-API для отчетности о прогрессе загрузки в JavaScript, JSON или любом другом формате (с помощью шаблонов).

Это работает, потому что Nginx действует как ускоритель вышестоящего сервера, храня загруженный контент POST на диске, прежде чем передать его на вышестоящий сервер. Каждый отдельный запрос на загрузку POST должен содержать уникальный идентификатор прогресса.

Этот модуль является объектом авторского права (c) 2007-2012 Брис Фигюрэ и лицензирован под лицензией BSD (см. LICENSE). * Код rbtree и shm_zone основан на модуле Nginx limit_zone Игоря Сысоева. * Код заголовка expire основан на модуле Nginx header_filter Игоря Сысоева.

Идея JSON и механизм основаны на Lighttpd mod_uploadprogress: http://blog.lighttpd.net/articles/2006/08/01/mod_uploadprogress-is-back

ПРЕДУПРЕЖДЕНИЕ: * при компиляции с --with-debug этот модуль будет генерировать большое количество лог-сообщений.

НЕСОВМЕСТИМЫЕ ИЗМЕНЕНИЯ

v0.9.0:

JSONP теперь является выходным форматом по умолчанию для прогресс-проб. Если вы зависите от этого модуля, обслуживающего устаревший java-вывод, используйте: upload_progress_java_output в расположении прогресс-пробы.

Конфигурация

Каждый запрос на загрузку должен иметь уникальный идентификатор. Этот уникальный идентификатор будет использоваться для хранения запроса и ссылки на него в отчете. Этот идентификатор можно передавать как аргумент GET или как HTTP заголовок с именем X-Progress-ID.

upload_progress +++++++++++++++ :Синтаксис: upload_progress :По умолчанию: нет :Контекст: http :Описание: Эта директива включает модуль отслеживания прогресса загрузки и резервирует байт для , который будет использоваться для хранения информации об отслеживании по соединению.

track_uploads +++++++++++++ :Синтаксис: track_uploads :По умолчанию: нет :Контекст: location :Описание: Эта директива включает отслеживание загрузок для текущего местоположения. Каждый POST, попадающий в это местоположение, будет регистрировать запрос в отслеживателе прогресса загрузки . Поскольку Nginx пока не поддерживает загрузки по RFC 1867, местоположение должно быть proxy_pass или fastcgi местоположением. POST должен иметь параметр запроса с именем X-Progress-ID (или HTTP заголовок с тем же именем), значение которого является уникальным идентификатором, используемым для получения информации о прогрессе. Если в POST нет такой информации, загрузка не будет отслеживаться. Отслеживаемые соединения хранятся максимум секунд после их завершения, чтобы иметь возможность предоставлять полезную информацию для запросов о прогрессе загрузки. ВНИМАНИЕ: эта директива должна быть последней директивой местоположения. Она должна находиться в местоположении proxy_pass или fastcgi_pass.

report_uploads ++++++++++++++ :Синтаксис: report_uploads :По умолчанию: нет :Контекст: location :Описание: Эта директива позволяет местоположению сообщать о прогрессе загрузки, который отслеживается директивой track_uploads для . Возвращаемый документ представляет собой текст Javascript с возможными 4 результатами по умолчанию: * запрос на загрузку еще не был зарегистрирован или неизвестен:
new Object({ 'state' : 'starting' })

    * запрос на загрузку завершен:
            new Object({ 'state' : 'done' })

    * запрос на загрузку вызвал ошибку HTTP:
            new Object({ 'state' : 'error', 'status' : <error code> })
        один код ошибки, который может быть полезен для отслеживания для клиента - это 413 (размер запроса слишком велик).

    * запрос на загрузку в процессе:
            new Object({ 'state' : 'uploading', 'received' : <size_received>, 'size' : <total_size>})

Возможно вернуть чистый json вместо этого javascript (см. upload_progress_json_output). Также возможно полностью настроить формат ответа с помощью директивы:
        upload_progress_template

HTTP запрос к этому местоположению должен иметь параметр X-Progress-ID или HTTP заголовок, содержащий действительный уникальный идентификатор текущей загрузки.

upload_progress_content_type ++++++++++++++++++++++++++++ :Синтаксис: upload_progress_content_type :По умолчанию: text/javascript :Контекст: location :Описание: Эта директива позволяет менять тип содержимого ответа запроса о прогрессе загрузки.

upload_progress_header ++++++++++++++++++++++ :Синтаксис: upload_progress_header :По умолчанию: X-Progress-ID :Контекст: location :Описание: Эта директива позволяет изменить имя заголовка для идентификатора прогресса.

upload_progress_jsonp_parameter ++++++++++++++++++++++ :Синтаксис: upload_progress_jsonp_parameter :По умолчанию: callback :Контекст: location :Описание: Эта директива позволяет изменить имя параметра GET с именем обратного вызова jsonp.

upload_progress_java_output +++++++++++++++++++++++++++ :Синтаксис: upload_progress_java_output :По умолчанию: N/A :Контекст: location :Описание: Эта директива настраивает всё на вывод как javascript совместимый код для eval().

upload_progress_json_output +++++++++++++++++++++++++++ :Синтаксис: upload_progress_json_output :По умолчанию: N/A :Контекст: location :Описание: Эта директива настраивает всё на вывод как чистый json.

upload_progress_jsonp_output ++++++++++++++++++++++++++++ :Синтаксис: upload_progress_jsonp_output :По умолчанию: N/A :Контекст: location :Описание: Эта директива настраивает всё на вывод как jsonp (как вывод json, но с обратным вызовом).

upload_progress_template ++++++++++++++++++++++++ :Синтаксис: upload_progress_template