Die REST-API unserer App wird von Gunicorn ( nicht hinter Nginx) bereitgestellt, das auf AWS EC2-Instanzen mit einem typischen Setup für automatische Skalierung / Lastenausgleich ausgeführt wird. Das Leerlauf-Timeout des Load Balancers beträgt 60 Sekunden und das Keep-Alive-Timeout von Gunicorn 2 Sekunden. Wir haben sporadische 504 Gateway Timeout
Antworten von dieser Konfiguration gesehen. Laut Amazon-Dokumenten kann dies daran liegen, dass das Keep-Alive-Timeout des Servers niedriger ist als die Leerlauf-Timeout-Einstellung des Load Balancers:
Ursache 2: Registrierte Instanzen, die die Verbindung zu Elastic Load Balancing schließen.
Lösung 2: Aktivieren Sie die Keep-Alive-Einstellungen für Ihre EC2-Instanzen, und legen Sie das Keep-Alive-Timeout auf einen Wert fest, der größer oder gleich den Einstellungen für das Leerlauf-Timeout Ihres Load Balancers ist.
Bei Nginx keepalive_timeout
beträgt der Standardwert 75 Sekunden, was anscheinend gut mit den ELB-Standardeinstellungen zusammenarbeitet. Allerdings Gunicorn docs empfehlen eine keepalive
Einstellung im Bereich von 1-5 Sekunden.
Ist es sinnvoll, Gunicorns Keepalive auf 75 Sekunden zu erhöhen, oder gibt es einen guten Grund, es unter 5 Sekunden zu halten, obwohl wir keinen Reverse-Proxy verwenden?
quelle