Betrachten wir unsere aktuelle Architektur:Wie verhindert man, dass beim Hochladen großer Dateien ein Zeitlimit für Verbindungsunterbrechungen auftritt?
+---------------+
| Clients |
| (API) |
+-------+-------+
∧
∨
+-------+-------+ +-----------------------+
| Load Balancer | | Nginx |
| (AWS - ELB) +<-->+ (Service Routing) |
+---------------+ +-----------------------+
∧
∨
+-----------------------+
| Nginx |
| (Backend layer) |
+-----------+-----------+
∧
∨
----------------- +-----------+-----------+
File Storage | Gunicorn |
(AWS - S3) <-->+ (Django) |
----------------- +-----------------------+
Wenn ein Client, mobile oder Web, versuchen, große Dateien (mehr als ein GB) auf unseren Servern laden dann oft inaktive Verbindung Timeouts Gesicht. Entweder von ihrer Client-Bibliothek, beispielsweise von iOS, oder von unserem Load Balancer.
Wenn die Datei tatsächlich vom Client hochgeladen wird, treten keine Zeitüberschreitungen auf, da die Verbindung nicht "inaktiv" ist und Bytes übertragen werden. Aber ich denke, wenn die Datei in die Nginx-Backend-Ebene übertragen wurde und Django die Datei auf S3 hochlädt, wird die Verbindung zwischen dem Client und unserem Server inaktiv, bis der Upload abgeschlossen ist.
Gibt es eine Möglichkeit dies zu verhindern und auf welcher Ebene sollte ich dieses Problem angehen?
Haben Sie client_max_body_size in NGINX conf festgelegt? –
Welches System löst das Timeout aus? ELB oder etwas anderes? ELB ist standardmäßig 60s, aber es ist konfigurierbar. –
In diesem Fall ist es der Client, der eine Zeitversetzung durchführt. –