考虑我们当前的体系结构:如何避免上传大文件时出现空闲连接超时?
+---------------+
| Clients |
| (API) |
+-------+-------+
∧
∨
+-------+-------+ +-----------------------+
| Load Balancer | | Nginx |
| (AWS - ELB) +<-->+ (Service Routing) |
+---------------+ +-----------------------+
∧
∨
+-----------------------+
| Nginx |
| (Backend layer) |
+-----------+-----------+
∧
∨
----------------- +-----------+-----------+
File Storage | Gunicorn |
(AWS - S3) <-->+ (Django) |
----------------- +-----------------------+
当一个客户端,手机或网页,尝试我们的服务器上上传大文件(超过GB以上)则经常面临空闲连接超时。无论是从其客户端库(例如iOS)还是来自我们的负载均衡器。
当文件实际上由客户端上传时,由于连接不是“空闲”,正在传输字节,所以不会发生超时。但是我认为,当文件传输到Nginx后端层并且Django开始将文件上传到S3时,客户端和我们的服务器之间的连接将变为空闲状态,直到上传完成。
有没有办法来防止这种情况发生,我应该在哪一层解决这个问题?
您是否在NGINX conf中设置了client_max_body_size? –
什么系统启动超时? ELB还是别的? ELB默认为60秒,但可以配置。 –
在这种情况下,客户端正在计时 –