Come adeguare i timeout del reverse proxy ai caricamenti di foto e video di grandi dimensioni

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Imposta i timeout del proxy in base al caricamento legittimo più lento che accetti, aggiungendo un margine, e mantieni l'applicazione e qualsiasi proxy upstream almeno altrettanto permissivi. Non risolvere ogni caricamento non riuscito scegliendo un timeout illimitato.

Una foto o un video di grandi dimensioni può non riuscire mentre la stessa app funziona normalmente, perché il corpo della richiesta, l'elaborazione upstream o la risposta supera un limite diverso. Prima raccogli il codice di stato, il tempo trascorso, la dimensione del file e il log del proxy. Queste osservazioni distinguono un rifiuto dovuto alla dimensione del corpo da un timeout di inattività, da un timeout del backend o da una disconnessione del client.

Identifica la fase in cui il caricamento termina

Ripeti il test con un file noto e annota se l'errore si verifica durante il trasferimento, dopo che la barra di avanzamento raggiunge il 100 percento o mentre il server elabora i contenuti multimediali. Ogni fase corrisponde a una connessione e a un timeout diversi.

Un errore sempre allo stesso numero di byte suggerisce un limite alla dimensione del corpo; un errore dopo lo stesso intervallo di inattività suggerisce un timeout. Un errore del gateway dopo il completamento del caricamento indica il tempo di attesa tra proxy e applicazione oppure il limite di elaborazione dell'applicazione.

Leggi insieme i log di accesso e di errore del proxy e i log dell'applicazione. Se il client ha chiuso per primo la connessione, aumentare solo il timeout del proxy non può aiutare; verifica il comportamento delle app mobili in background, la stabilità della VPN e il percorso della richiesta nel browser.

Misura un budget di timeout difendibile

Dividi il file più grande accettato per la velocità upstream supportata più lenta per stimare il tempo di trasferimento, quindi aggiungi margine per TLS, buffering e velocità variabile. Usa questo valore come limite massimo per le operazioni legittime, non come promessa che ogni connessione lenta debba rimanere aperta per sempre.

Distingui la durata totale dalla durata di inattività. Ad esempio, NGINX documenta direttive di timeout del proxy separate, e alcune misurano l'intervallo tra operazioni successive anziché la durata dell'intera risposta.

Tieni presente il rischio di denial-of-service. Proteggi gli endpoint di caricamento con autenticazione e controlli della velocità prima di estendere significativamente la durata delle connessioni e non esporre l'interfaccia di amministrazione del proxy.

Allinea ogni livello senza correggere eccessivamente

Imposta la dimensione del corpo della richiesta su un valore pari o superiore al massimo supportato dall'applicazione. Quindi allinea i timeout per la lettura del corpo dal client, la connessione upstream, la lettura upstream e l'invio upstream in base alla fase del problema osservato.

Verifica la presenza di una CDN esterna, di un tunnel, di un bilanciatore del carico o di un secondo reverse proxy con un limite immutabile più breve. Il limite effettivo è il più piccolo nella catena, quindi modificare solo il proxy interno potrebbe non produrre alcun risultato osservabile.

Documenta gli URL dell'applicazione e le route del proxy. La guida di ZimaSpace su Immich su una condivisione di rete aiuta a distinguere gli errori del percorso di caricamento dalla latenza e dalle interruzioni del mount dello storage.

-15% OFF

Ripeti i test con caricamenti lenti, grandi e interrotti

Carica il file originale che causava l'errore dalla posizione originale e alla velocità di rete originale. Il test è superato solo se il caricamento viene completato, l'applicazione indicizza il file e il contenuto è riproducibile o visualizzabile, non basta un semplice codice di successo HTTP.

Limita una connessione di test alla velocità minima supportata e ripeti il test. Quindi interrompi deliberatamente un caricamento; i file temporanei e i record incompleti nel database dovrebbero essere eliminati secondo il comportamento dell'applicazione.

Smetti di aumentare i timeout quando i log mostrano un arresto anomalo del backend, un errore dello storage o un limite fisso del provider esterno. Ripristina valori eccessivi, correggi il livello che causa il problema e mantieni il timeout più breve che copra con costanza il carico di lavoro misurato.

Domande frequenti

Tutti i timeout del proxy dovrebbero usare lo stesso valore? No. La stabilizzazione della connessione, la lettura del corpo dal client, l'attesa della risposta upstream e gli invii downstream proteggono fasi diverse.

Perché una foto piccola funziona mentre un video non riesce? Il video potrebbe superare una soglia di dimensione del corpo, richiedere più tempo di un limite di inattività o attivare un'elaborazione lato server più lunga; i log e la tempistica dell'errore permettono di individuare la causa.

Supporto e consigli

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.