L'API REST della nostra app è fornita da Gunicorn ( non dietro Nginx) in esecuzione su istanze AWS EC2 con una tipica configurazione di ridimensionamento automatico / bilanciamento del carico. Il timeout di inattività del bilanciamento del carico è di 60 secondi e il timeout keep-alive di Gunicorn è di 2 secondi. Abbiamo visto 504 Gateway Timeout
risposte sporadiche da questa configurazione. Secondo i documenti di Amazon , ciò può essere dovuto al fatto che il timeout keep-alive del server è inferiore all'impostazione del timeout di inattività del bilanciamento del carico:
Causa 2: istanze registrate che chiudono la connessione al bilanciamento del carico elastico.
Soluzione 2: abilitare le impostazioni keep-alive sulle istanze EC2 e impostare il timeout keep-alive su maggiore o uguale alle impostazioni di timeout di inattività del bilanciamento del carico.
Con Nginx, il valore predefinito keepalive_timeout
è 75 secondi, che a quanto pare funziona bene con le impostazioni predefinite ELB. Tuttavia, i documenti di Gunicorn raccomandano keepalive
un'impostazione nell'intervallo di 1-5 secondi.
Ha senso portare il keepalive di Gunicorn a 75 secondi, o c'è una buona ragione per tenerlo sotto i 5 secondi anche se non stiamo usando un proxy inverso di fronte?