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

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

Установка

Вы можете установить этот модуль в любой дистрибутив, основанный на RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-upload-progress
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-upload-progress

Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_uploadprogress_module.so;

Этот документ описывает nginx-module-upload-progress v0.9.4, выпущенный 15 марта 2025 года.


Введение

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

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

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

Этот модуль является объектом авторского права (c) 2007-2012 Brice Figureau и лицензирован под лицензией 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 :Описание: Эта директива позволяет изменить content-type ответа опроса прогресса загрузки.

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

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

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

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