Codice di stato HTTP 504 (timeout del gateway) - Amazon CloudFront

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Codice di stato HTTP 504 (timeout del gateway)

Un codice di stato HTTP 504 (timeout del gateway) indica che quando viene CloudFront inoltrata una richiesta all'origine (poiché l'oggetto richiesto non era nella cache edge), si verificava una delle seguenti situazioni:

  • L'origine ha restituito un codice di stato HTTP 504 a. CloudFront

  • L'origine non ha risposto prima della scadenza della richiesta.

CloudFront restituirà un codice di stato HTTP 504 se il traffico verso l'origine è bloccato da un firewall o da un gruppo di sicurezza o se l'origine non è accessibile su Internet. Verifica prima se ci sono questi problemi. Quindi, se il problema non è l'accesso, concentrati sui ritardi delle applicazioni e i timeout dei server per identificare e risolvere i problemi.

Configura il firewall sul tuo server di origine per consentire il traffico CloudFront

Se il firewall sul server di origine blocca il CloudFront traffico, CloudFront restituisce un codice di stato HTTP 504, quindi è bene assicurarsi che non sia questo il problema prima di verificare la presenza di altri problemi.

Il metodo utilizzato per determinare se si tratta di un problema con il tuo firewall dipende da quale sistema utilizza il tuo server di origine:

Quando valuti la configurazione del firewall sul tuo server di origine, cerca eventuali firewall o regole di sicurezza che blocchino il traffico proveniente dalle CloudFront edge location, in base all'intervallo di indirizzi IP pubblicato. Per ulteriori informazioni, consulta Posizioni e intervalli di indirizzi IP dei server periferici CloudFront .

Se l'intervallo di indirizzi CloudFront IP può connettersi al server di origine, assicurati di aggiornare le regole di sicurezza del server per incorporare le modifiche. È possibile eseguire la sottoscrizione a un argomento Amazon SNS e ricevere notifiche quando il file dell'intervallo di indirizzi IP viene aggiornato. Dopo avere ricevuto la notifica, puoi utilizzare il codice per recuperare il file, analizzarlo e apportare le modifiche necessarie per l'ambiente locale. Per ulteriori informazioni, consulta Abbonarsi alle modifiche degli indirizzi IP AWS pubblici tramite Amazon SNS nel AWS News Blog.

Configura i gruppi di sicurezza sul tuo server di origine per consentire il traffico CloudFront

Se la tua origine utilizza Elastic Load Balancing, esamina i gruppi di sicurezza ELB e assicurati che i gruppi di sicurezza consentano il traffico in entrata da. CloudFront

Puoi anche utilizzarli AWS Lambda per aggiornare automaticamente i tuoi gruppi di sicurezza per consentire il traffico in entrata da. CloudFront

Rendere accessibile su Internet il proprio server di origine personale

Se non CloudFront riesci ad accedere al tuo server di origine personalizzato perché non è disponibile pubblicamente su Internet, CloudFront restituisce un errore HTTP 504.

CloudFront le edge location si connettono ai server di origine tramite Internet. Se l'origine personalizzata si trova su una rete privata, non è CloudFront possibile raggiungerla. Per questo motivo, non puoi utilizzare server privati, compresi i Classic Load Balancer interni, come server di origine con. CloudFront

Per verificare che il traffico Internet possa connettersi al server di origine, esegui i seguenti comandi (OriginDomainNamedov'è il nome di dominio del server):

Per il traffico HTTPS:

  • nc -zv 443 OriginDomainName

  • OriginDomainNametelnet 443

Per il traffico HTTP:

  • cnc-zv 80 OriginDomainName

  • telnet 80 OriginDomainName

Trovare e correggere il ritardo nelle risposte dalle applicazioni sul server di origine

I timeout del server sono spesso il risultato di un tempo di risposta molto lungo da parte di un'applicazione o di un valore di timeout impostato troppo basso.

Una soluzione rapida per evitare gli errori HTTP 504 consiste semplicemente nell'impostare un valore di CloudFront timeout più elevato per la distribuzione. Tuttavia, ti consigliamo di verificare innanzitutto come risolvere eventuali problemi di prestazioni e latenza con l'applicazione e il server di origine. Quindi puoi impostare un valore di timeout ragionevole che aiuta a prevenire gli errori HTTP 504 e fornisce una buona reattività agli utenti.

Ecco una panoramica delle fasi che puoi eseguire per individuare i problemi di prestazioni e correggerli:

  1. Misura la latenza tipica e a elevato carico (reattività) della tua applicazione Web.

  2. Aggiungi risorse aggiuntive, ad esempio CPU o memoria, se necessario. Adotta altre misure per risolvere i problemi, ad esempio il tuning delle query del database in base a scenari a elevato carico.

  3. Se necessario, modifica il valore di timeout per la distribuzione. CloudFront

Di seguito sono riportati i dettagli di ciascuna fase.

Misura la latenza tipica e a elevato carico

Per determinare se uno o più server di applicazioni Web back-end riscontri elevata latenza, esegui il seguente comando curl Linux su ciascun server:

curl -w "Connect time: %{time_connect} Time to first byte: %{time_starttransfer} Total time: %{time_total} \n" -o /dev/null https://www.example.com/yourobject
Nota

Se esegui Windows sui server, puoi cercare e scaricare curl per Windows per eseguire un comando simile.

Quando misuri e valuti la latenza di un'applicazione che viene eseguita sul server, tieni presente quanto segue:

  • I valori di latenza sono relativi a ogni applicazione. Tuttavia, un Time to First Byte (Tempo per il primo byte) in millisecondi anziché secondi o più, è più sensato.

  • Se misuri la latenza dell'applicazione sotto carico normale e non presenta problemi, tieni presente che i visualizzatori potrebbero ancora avere timeout sotto carico elevato. Quando la richiesta è elevata, i server possono avere risposte ritardate o non rispondere affatto. Per prevenire problemi di latenza a causa di un elevato carico, verifica le risorse del server, quali CPU, memoria e letture e scritture sul disco per assicurarti che i server abbiano la capacità di dimensionarsi per un carico elevato.

    Puoi eseguire il seguente comando Linux per verificare la memoria utilizzata dai processi Apache:

    watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"

  • L'elevato utilizzo della CPU sul server può ridurre in modo significativo le prestazioni di un'applicazione. Se utilizzi un'istanza Amazon EC2 per il tuo server di backend, esamina i CloudWatch parametri del server per verificare l'utilizzo della CPU. Per ulteriori informazioni, consulta la Amazon CloudWatch User Guide. Oppure, se utilizzi il tuo server, fai riferimento alla documentazione della Guida del server per istruzioni su come verificare l'utilizzo della CPU.

  • Verifica la presenza di altri potenziali problemi in presenza di carichi elevati, ad esempio query del database che vengono eseguite lentamente in presenza di un elevato volume di richieste.

Aggiungi le risorse e ottimizza i server e i database

Dopo aver valutato la reattività delle applicazioni e dei server, assicurati di disporre di risorse sufficienti per le situazioni di traffico tipiche e a elevato carico:

  • Se disponi di un tuo server, assicurati che abbia CPU, memoria e spazio su disco sufficiente per gestire le richieste del visualizzatore, in base alla tua valutazione

  • Se utilizzi un'istanza Amazon EC2 come server back-end, assicurati che il tipo di istanza disponga delle risorse appropriate per soddisfare le richieste in entrata. Per maggiori informazioni, consulta Tipi di istanza nella Guida per l'utente di Amazon EC2.

Inoltre, considera le seguenti fasi di tuning per evitare timeout:

  • Se il valore Time to First Byte (Tempo per il primo byte) restituito dal comando curl sembra alto, adotta le misure necessarie per migliorare le prestazioni dell'applicazione. Il miglioramento della reattività delle applicazioni contribuirà a sua volta a ridurre gli errori di timeout.

  • Esegui il tuning delle query del database per assicurarti che siano in grado di gestire volumi di richieste elevate senza rallentare le prestazioni.

  • Configura le connessioni keep-alive (persistenti) sul tuo server di back-end. Questa opzione aiuta a evitare le latenze che si verificano quando le connessioni devono essere ristabilite per le richieste o per gli utenti successivi.

  • Se utilizzi ELB come server di origine, scopri in che modo è possibile ridurre la latenza rivedendo i suggerimenti nel seguente articolo del Knowledge Center: Come posso risolvere i problemi di alta latenza sul mio ELB Classic Load Balancer?

Se necessario, modifica il valore di CloudFront timeout

Se hai valutato e risolto rallentamenti di prestazioni delle applicazioni, anomalie nella capacità del server di origine e altri problemi, ma i visualizzatori riscontrano ancora errori HTTP 504, considera la possibilità di modificare il tempo specificato nella distribuzione per il timeout della risposta del server di origine. Per ulteriori informazioni, consulta Timeout di risposta (solo origini personalizzate).