You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django+React应用时Nginx已设置client_max_body_size仍返回413 Request entity too large问题求助

解决Nginx反向代理Django时的413 Request Entity Too Large错误

我来帮你搞定这个大文件上传的问题——你已经尝试设置client_max_body_size但没生效,咱们从几个关键点排查:

1. 调整Nginx的client_max_body_size配置位置和取值

虽然你在server块里设置了client_max_body_size 0;,但有些Nginx版本对0(无限制)的支持可能存在兼容性问题,而且全局配置会比单个server块更可靠。建议:

  • 打开主配置文件/etc/nginx/nginx.conf,在http块内添加(或修改):
    client_max_body_size 100M;  # 根据你的需求设置足够大的值,比如100M、500M甚至1G
    
  • 这样所有server和location都会继承这个配置,避免单个块的配置被覆盖。修改后重启Nginx(容器内执行nginx -s reload),再用nginx -T确认配置已经生效。

2. 检查Django自身的上传限制

即使Nginx放开了限制,Django默认也有上传大小的约束:

  • 在Django的settings.py中添加或修改以下配置:
    # 允许的最大内存中上传文件大小(超过会写入临时文件)
    FILE_UPLOAD_MAX_MEMORY_SIZE = 104857600  # 100MB
    # 允许的最大POST数据大小
    DATA_UPLOAD_MAX_MEMORY_SIZE = 104857600
    
  • 如果你的视图里有自定义的上传大小校验,也要同步调整。

3. 确保Docker容器完全重建生效

有时候Docker的缓存会导致新配置没被应用,执行以下命令强制重建镜像并重启容器:

docker-compose build --no-cache
docker-compose up -d

重建后进入容器,再次用nginx -T验证client_max_body_size是否出现在正确的配置块中。

4. 排查是否存在多层代理拦截

如果你的Docker容器前端还有其他代理(比如宿主机器的Nginx、云服务商的负载均衡),这些外层代理也会先检查请求大小。需要在所有代理层级都设置对应的client_max_body_size,确保大文件能一路传到Django应用。

按照这个顺序排查,应该就能解决413错误了。

内容的提问来源于stack exchange,提问作者Mislav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:54:11