2010-07-13 25 views
6

ho un'applicazione server che corre nel cloud Amazon EC2. Dal mio client (il browser) faccio una richiesta HTTP che carica un file sul server che poi elabora il file. Se c'è molta elaborazione (file grande ), il server va sempre in timeout con un errore di continuazione del backend 504 sempre esattamente dopo 120 secondi. Anche se ottengo questo errore, il server continua ad elaborare la richiesta e la completa (verificata controllando il database) ma non riesco a vedere il risultato finale sul mio client a causa del timeout.HTTP 504 timeout dopo esattamente 120 secondi

io sono all'oscuro per quanto riguarda il motivo per cui questo sta accadendo. Qualcuno ha avuto un timeout simile a 504? C'è qualche server proxy intermedio non nel mio controllo che sta scadendo?

+0

Potresti risolvere il problema? – Tony

risposta

0

è possibile che il browser timeout durante l'esecuzione dello script.

1

Supponendo che il codice di stato corretto viene restituito, il problema è che un proxy intermedio è timeout. "Il server, pur fungendo da gateway o proxy, non ha ricevuto una risposta tempestiva dal server upstream specificato dall'URI." (Http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5) È molto probabile che indica che il server di origine sta avendo un qualche tipo di problema (vale a dire, prendendo molto tempo per elaborare la tua richiesta), quindi non risponde rapidamente.

Forse la soluzione migliore è quella di ri-craft server un'applicazione in modo che risponde con un codice di stato "303 Vedi gli altri"; quindi il client può recuperare i dati in un punto dati successivo, una volta che il server ha terminato l'elaborazione e creato il risultato finale.

Modifica: Un'altra idea è di ricreare l'app del server in modo che risponda con un codice di stato "Richiesta di entità troppo grande 413" quando la dimensione dell'entità richiesta è troppo grande. Questo permetterà di eliminare l'errore, anche se può rendere la vostra applicazione meno utile se si può elaborare solo i file di "piccole" "

Altre soluzioni possibili:.

  • Aumentare il valore di timeout del proxy (se si tratta di sotto il vostro controllo)
  • Fai la tua richiesta a un server diverso (se c'è un altro, server più veloce con la stessa app)
  • Fai la tua richiesta in modo diverso (se possibile) in modo tale che si sta inviando meno dati in un momento
+0

Qualche idea per risolvere il problema? Il mio server ha un timeout dopo 30 secondi. Stesso scenario, caricamento di file di grandi dimensioni in Amazon EC2 – Tony

+0

Oltre a quelli elencati? Scusa no. –

5

Ho un problema simile e nel mio caso credo sia dovuto alla connessione tra Elastic Load Balancer (ELB) e l'istanza EC2.

Per una soluzione a lungo termine, utilizzerò la risposta di stato 303 + elaborazione back-end suggerita da james.garriss sopra.

Per la soluzione a breve termine potrebbe essere possibile per il supporto Amazon aumentare il timeout ELB (vedere la risposta in https://forums.aws.amazon.com/thread.jspa?messageID=491594&#491594). Sfortunatamente non sembra esserci alcun modo per modificare il timeout da soli tramite API o console.

[Aggiornamento] AWS ora consente di aggiornare il timeout di inattività tramite la configurazione di console, CLI o .ebextensions. Vedi http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html (grazie @Daniel Patz per l'aggiornamento)

+2

Sembra che ora puoi configurare tu stesso il timeout: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html –

Problemi correlati