Gunicorn+Nginx+Django环境下视频上传卡在40-45%,报net::ERR_CONNECTION_CLOSED
大文件上传报错
net::ERR_CONNECTION_CLOSED的排查与解决 针对你在Gunicorn+Nginx+Django环境上传385MB视频时卡在40%-45%并出现net::ERR_CONNECTION_CLOSED的问题,可从以下几个方向排查:
1. 调整Gunicorn超时配置
Gunicorn默认超时时间较短(通常30秒),大文件上传需要更长的处理时间。修改Gunicorn启动参数或配置文件:
- 启动命令添加:
--timeout 1200(与Nginx的proxy_read_timeout保持一致) - 若使用配置文件(如gunicorn.conf.py),添加:
timeout = 1200
2. 优化Nginx配置细节
你的Nginx配置中部分参数存在不合理之处,同时需验证权限:
- 降低
client_body_buffer_size:当前设置4096M过大,易引发内存问题,建议调整为256M或128M - 检查
client_body_temp_path权限:确保Nginx运行用户(如www-data、nginx)对/home/mrlonely/lumendjango/media目录拥有读写权限,执行命令调整:chown -R www-data:www-data /home/mrlonely/lumendjango/media - 补充
proxy_send_timeout:在location /块中添加proxy_send_timeout 1200;,与读取超时保持一致
3. 检查Django上传限制
Django默认对上传文件大小和内存占用有限制,需修改settings.py:
- 调整内存上传阈值:
# 设置为400MB(根据文件大小调整) DATA_UPLOAD_MAX_MEMORY_SIZE = 419430400 FILE_UPLOAD_MAX_MEMORY_SIZE = 419430400 # 若想让所有文件直接写入磁盘,可设置为0 # FILE_UPLOAD_MAX_MEMORY_SIZE = 0 - 验证临时目录权限:确保
FILE_UPLOAD_TEMP_DIR(若配置)存在且Django进程有读写权限,默认使用系统临时目录(如/tmp),需保证该目录空间充足
4. 系统层面限制排查
- 文件描述符限制:Linux默认文件描述符数量可能不足,临时调整执行:
永久调整需编辑ulimit -n 65535/etc/security/limits.conf,添加:nginx soft nofile 65535 nginx hard nofile 65535 {gunicorn运行用户} soft nofile 65535 {gunicorn运行用户} hard nofile 65535 - 磁盘空间:执行
df -h检查/home/mrlonely/lumendjango/media所在磁盘的剩余空间,确保至少有500MB以上可用 - 防火墙/安全组:检查iptables、firewalld等是否存在中断长连接的规则,调整TCP连接超时时间
5. 日志定位问题
- 查看Nginx错误日志:通常路径为
/var/log/nginx/error.log,查找上传过程中的权限、超时或资源不足错误 - 查看Gunicorn日志:启动时指定日志文件,如:
gunicorn --access-logfile gunicorn_access.log --error-logfile gunicorn_error.log ... - 查看Django日志:在
settings.py中配置LOGGING模块,捕获上传过程中的异常信息
内容的提问来源于stack exchange,提问作者MrLonely
相关产品推荐
相关产品推荐

