Nginx Tutorial · 5 min read · Jan 23, 2026
Exibindo o Progresso do Upload Com nginx No Debian
Exibindo o Progresso do Upload Com nginx No Debian
Este tutorial mostra como usar o módulo de progresso de upload do nginx para fazer o upload de um ou vários arquivos e exibir uma barra de progresso de upload para o usuário. Isso é útil, por exemplo, se os usuários fizerem upload de arquivos grandes, para que saibam que algo está acontecendo em segundo plano.
Não dou nenhuma garantia de que isso funcionará para você!
1 Instalando nginx-extras
O módulo de progresso de upload do nginx não está habilitado por padrão. Você pode executar
nginx -Vpara verificar se está habilitado - você deve ver algo como –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-upload-progress na saída. Se não estiver habilitado, instale o pacote nginx-extras:
apt-get install nginx-extrasDepois, execute
nginx -Vnovamente - o módulo de progresso de upload deve agora aparecer na saída:
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#
Para ativar o módulo, precisamos criar uma pequena zona no nginx.conf (no contêiner http {}) que é usada para rastrear uploads (eu nomeio a zona de uploads neste exemplo):
vi /etc/nginx/nginx.conf| [...] http { [...] # reserve 1MB sob o nome 'uploads' para rastrear uploads upload_progress uploads 1m; [...] } [...] |
Recarregue o nginx depois:
/etc/init.d/nginx reload2 Configurando Seu Vhost
Agora abra seu arquivo de configuração do vhost e coloque o seguinte dentro do contêiner server {} (se você usar ISPConfig, coloque isso no campo Diretrizes do nginx do site):
| [...] 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; ## Rastrear uploads para este local na zona definida ## acima com um tempo limite de 60 segundos. track_uploads uploads 60s; } location ^~ /progress { upload_progress_json_output; report_uploads uploads; } [...] |
No meu caso, o arquivo que processa os uploads (ou seja, o arquivo no atributo action do formulário de upload HTML) é chamado upload.php e reside na raiz do documento. Se seu arquivo tiver um nome diferente, ajuste location = /upload.php { de acordo. Também certifique-se de usar as opções fastcgi_pass corretas para seu site (provavelmente você usará um socket diferente do que estou usando aqui, ou está usando conexões TCP em vez de sockets).
Na linha track_uploads, é importante que você use o nome da zona upload_progress do capítulo 1 (uploads neste caso).
O contêiner location ^~ /progress {} deve ser levado literalmente, o que significa que não o altere (bem, você deve alterar a linha report_uploads se sua zona upload_progress não estiver nomeada uploads). Esta localização será usada para consultar o nginx sobre o status dos uploads de arquivos.
Recarregue o nginx depois (a menos que você use ISPConfig, que faz o reload por você):
/etc/init.d/nginx reload3 Construindo Um Formulário de Upload
Em seguida, precisamos de um formulário de upload com algum JavaScript que consulte a localização de progresso durante os uploads. Meu arquivo se parece com isso - nomeie-o como index.html, upload.html, etc. e coloque-o na raiz do seu documento:
| |
Em seguida, coloque o seguinte upload.php na raiz do seu documento:
| "; } } ?> |
upload.php armazena os arquivos enviados em um diretório chamado cache, então não se esqueça de criar esse diretório na raiz do seu documento e dar as permissões adequadas para que o PHP possa gravar nele.
É isso. Agora você pode chamar o arquivo com o formulário de upload em seu navegador e tentar fazer upload de alguns arquivos:

4 Links
- Módulo de Progresso de Upload do nginx: http://wiki.nginx.org/HttpUploadProgressModule
- nginx: http://nginx.org
- Debian: http://www.debian.org
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.