Docker环境部署的Django搭配Nginx上传多文件返回400错误如何解决
排查修复步骤
- 先把Nginx日志打开,没有日志根本没法精准定位问题,在你Nginx配置的server块里加两行:
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log debug;
改完重启Nginx容器,重新触发上传报错,执行docker logs 你的Nginx容器名就能拿到具体报错日志,根据报错直接针对性修复即可。
- 先给你几个从现有配置能看出来的高发问题,你可以先逐一验证:
- 请求头限制导致400:多文件上传的form-data请求头会带较长的边界字段,Nginx默认的请求头缓冲区不足,且默认关闭下划线开头的请求头解析,很容易直接返回400,在server块加以下配置即可:
underscores_in_headers on; large_client_header_buffers 4 16k;- 代理路径转发错误:你现在
/api/location块的proxy_pass http://api没有加末尾斜杠,会把/api/xxx完整路径直接转发给后端,如果你Django接口没有/api前缀就会直接报错,改成proxy_pass http://api/;(注意末尾多一个斜杠),转发的时候会自动去掉/api前缀。 - upstream配置错误:你upstream里写的是公网域名
neworleansenglishcourse.com.br:8000,但你的后端服务是同Docker网络下名为backend的容器,直接把upstream改成server backend:8000即可,不用走公网解析,避免Docker内部域名解析异常。 - Gunicorn限制导致400:你用的Gunicorn默认有请求头、请求体大小限制,多文件上传很容易触线,修改后端启动命令:
同时在Django的settings.py里加上配置,对齐你Nginx的上传大小限制:command: gunicorn plataformaingles.wsgi --bind 0.0.0.0:8000 --limit-request-line 0 --limit-request-field_size 0 --limit-request-fields 1000DATA_UPLOAD_MAX_MEMORY_SIZE = 8 * 1024 * 1024 * 1024 FILE_UPLOAD_MAX_MEMORY_SIZE = 8 * 1024 * 1024 * 1024
内容的提问来源于stack exchange,提问作者italoooliveira
相关产品推荐
相关产品推荐

