nginx tutorial · 4 min read · Jan 23, 2026

Visualizzazione del progresso del caricamento con nginx su Debian

Visualizzazione del progresso del caricamento con nginx su Debian

Questo tutorial mostra come utilizzare il modulo di progresso del caricamento di nginx per caricare uno o più file e visualizzare una barra di progresso del caricamento per l’utente. Questo è utile, ad esempio, se gli utenti caricano file di grandi dimensioni, in modo che sappiano che qualcosa sta accadendo in background.

Non fornisco alcuna garanzia che questo funzioni per te!

1 Installazione di nginx-extras

Il modulo di progresso del caricamento di nginx non è abilitato per impostazione predefinita. Puoi eseguire

nginx -V

per controllare se è abilitato - dovresti quindi vedere qualcosa come –add-module=/tmp/buildd/nginx-1.4.4/debian/modules/nginx-upload-progress nell’output. Se non è abilitato, installa il pacchetto nginx-extras:

apt-get install nginx-extras

Dopo, esegui di nuovo

nginx -V
  • il modulo di progresso del caricamento dovrebbe ora apparire nell’output:

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#

Per attivare il modulo, dobbiamo creare una piccola zona in nginx.conf (nel contenitore http {}) che viene utilizzata per tenere traccia dei caricamenti (chiamo la zona uploads in questo esempio):

vi /etc/nginx/nginx.conf

| [...] http { [...] # riserva 1MB con il nome 'uploads' per tenere traccia dei caricamenti upload_progress uploads 1m; [...] } [...] |

Ricarica nginx dopo:

/etc/init.d/nginx reload

2 Configurazione del tuo Vhost

Ora apri il tuo file di configurazione vhost e metti il seguente codice all’interno del contenitore server {} (se usi ISPConfig, metti questo nel campo Direttive nginx del sito web):

| [...] 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; ## Tieni traccia dei caricamenti per questa posizione nella zona definita ## sopra con un timeout di 60 secondi. track_uploads uploads 60s; } location ^~ /progress { upload_progress_json_output; report_uploads uploads; } [...] |

Nel mio caso, il file che elabora i caricamenti (cioè, il file nell’attributo action del modulo HTML di caricamento) si chiama upload.php e si trova nella radice del documento. Se il tuo file ha un nome diverso, modifica location = /upload.php { di conseguenza. Assicurati anche di utilizzare le opzioni fastcgi_pass corrette per il tuo sito web (probabilmente utilizzerai un altro socket rispetto a quello che sto usando qui, o stai utilizzando connessioni TCP invece di socket).

Nella riga track_uploads è importante che tu utilizzi il nome della zona upload_progress dal capitolo 1 (uploads in questo caso).

Il contenitore location ^~ /progress {} deve essere preso alla lettera, il che significa non cambiarlo (beh, dovresti cambiare la riga report_uploads se la tua zona upload_progress non è chiamata uploads). Questa posizione sarà utilizzata per interrogare nginx sullo stato dei caricamenti dei file.

Ricarica nginx dopo (a meno che tu non usi ISPConfig che fa il reload per te):

/etc/init.d/nginx reload

3 Creazione di un modulo di caricamento

Successivamente, abbiamo bisogno di un modulo di caricamento con un po’ di JavaScript che interroga la posizione del progresso durante i caricamenti. Il mio file appare così - chiamalo index.html, upload.html, ecc. e mettilo nella tua radice del documento:

| Progresso del caricamento nginx

'; print '- Max. Uploadsize: ' . ini_get('upload_max_filesize'); ?>
0%
|

Successivamente, metti il seguente upload.php nella tua radice del documento:

| "; } } ?> |

upload.php memorizza i file caricati in una directory chiamata cache, quindi non dimenticare di creare quella directory nella tua radice del documento e darle le autorizzazioni appropriate affinché PHP possa scriverci.

Questo è tutto. Puoi ora chiamare il file con il modulo di caricamento nel tuo browser e provare a caricare alcuni file:

4 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.