nginx, Debian · 4 min read · Jan 23, 2026

Отображение прогресса загрузки с помощью nginx на Debian

Отображение прогресса загрузки с помощью nginx на Debian

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

Я не даю никаких гарантий, что это сработает для вас!

1 Установка nginx-extras

Модуль прогресса загрузки nginx не включен по умолчанию. Вы можете выполнить

nginx -V

чтобы проверить, включен ли он - вы должны увидеть что-то вроде –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-upload-progress в выводе. Если он не включен, установите пакет nginx-extras:

apt-get install nginx-extras

После этого снова выполните

nginx -V
  • модуль прогресса загрузки теперь должен появиться в выводе:

root@server1:/var/www# nginx -V
nginx version: nginx/1.4.4
TLS SNI support enabled
configure arguments: –prefix=/usr/share/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-client-body-temp-path=/var/lib/nginx/body –http-fastcgi-temp-path=/var/lib/nginx/fastcgi –http-log-path=/var/log/nginx/access.log –http-proxy-temp-path=/var/lib/nginx/proxy –http-scgi-temp-path=/var/lib/nginx/scgi –http-uwsgi-temp-path=/var/lib/nginx/uwsgi –lock-path=/var/lock/nginx.lock –pid-path=/run/nginx.pid –with-pcre-jit –with-debug –with-http_addition_module –with-http_dav_module –with-http_flv_module –with-http_geoip_module –with-http_gzip_static_module –with-http_image_filter_module –with-http_mp4_module –with-http_perl_module –with-http_random_index_module –with-http_realip_module –with-http_secure_link_module –with-http_spdy_module –with-http_stub_status_module –with-http_ssl_module –with-http_sub_module –with-http_xslt_module –with-ipv6 –with-mail –with-mail_ssl_module –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/headers-more-nginx-module –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-auth-pam –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-cache-purge –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-dav-ext-module –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-development-kit –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-echo –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/ngx-fancyindex –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-http-push –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-lua –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-upload-progress –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-upstream-fair –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/ngx_http_substitutions_filter_module
root@server1:/var/www#

Чтобы активировать модуль, нам нужно создать небольшую зону в nginx.conf (в контейнере http {}), которая используется для отслеживания загрузок (я назову зону uploads в этом примере):

vi /etc/nginx/nginx.conf

| [...] http { [...] # резервируем 1MB под именем 'uploads' для отслеживания загрузок upload_progress uploads 1m; [...] } [...] |

Перезагрузите nginx после этого:

/etc/init.d/nginx reload

2 Настройка вашего Vhost

Теперь откройте файл конфигурации вашего vhost и поместите следующее внутри контейнера server {} (если вы используете ISPConfig, поместите это в поле nginx Directives веб-сайта):

| [...] client_max_body_size 100M; location = /upload.php { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/lib/php5-fpm/web1.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; ## Отслеживать загрузки для этого местоположения в зоне, определенной ## выше с тайм-аутом 60 секунд. track_uploads uploads 60s; } location ^~ /progress { upload_progress_json_output; report_uploads uploads; } [...] |

В моем случае файл, который обрабатывает загрузки (т.е. файл в атрибуте action HTML формы загрузки), называется upload.php и находится в корне документа. Если ваш файл называется иначе, отредактируйте location = /upload.php { соответственно. Также убедитесь, что вы используете правильные параметры fastcgi_pass для вашего веб-сайта (вы, вероятно, будете использовать другой сокет, чем тот, который я использую здесь, или вы используете TCP-соединения вместо сокетов).

В строке track_uploads важно, чтобы вы использовали имя зоны upload_progress из главы 1 (uploads в данном случае).

Контейнер location ^~ /progress {} должен восприниматься буквально, что означает, что не изменяйте его (ну, вы должны изменить строку report_uploads, если ваша зона upload_progress не называется uploads). Это местоположение будет использоваться для опроса nginx о статусе загрузки файлов.

Перезагрузите nginx после этого (если вы не используете ISPConfig, который делает перезагрузку за вас):

/etc/init.d/nginx reload

3 Создание формы загрузки

Теперь нам нужна форма загрузки с некоторым JavaScript, который опрашивает местоположение прогресса во время загрузок. Мой файл выглядит так - назовите его index.html, upload.html и т.д. и поместите его в корень вашего документа:

| Прогресс загрузки nginx

'; print '- Макс. размер загрузки: ' . ini_get('upload_max_filesize'); ?>
0%
|

Затем поместите следующий upload.php в корень вашего документа:

| "; } } ?> |

upload.php сохраняет загруженные файлы в директории под названием cache, поэтому не забудьте создать эту директорию в корне вашего документа и предоставить ей соответствующие разрешения, чтобы PHP мог записывать в нее.

Вот и все. Теперь вы можете вызвать файл с формой загрузки в вашем браузере и попробовать загрузить несколько файлов:

4 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.