先看现象。Dify 0.15 用 docker compose 部署,上传 20MB 的 PDF 到知识库,前端直接报 413 Request Entity Too Large,小文件正常。
排查方向其实有限,先把可能性排一排。前置 nginx 的 client_max_body_size 默认只到 15m。也可能是后端 API 自己的上传限制没放开。
不容易想到的是,反向代理还有一层网关限制。
还有一种情况,浏览器请求被 WAF 拦在更前面。
第一件事是看 nginx 当前的限制
docker compose exec nginx grep -r client_max_body_size /etc/nginx/
调到 50m 并重载
docker compose exec nginx sed -i 's/client_max_body_size .*/client_max_body_size 50m;/' /etc/nginx/conf.d/default.conf
接着用 curl 直接传一次
curl -F 'file=@manual.pdf' -H 'Authorization: Bearer $KEY' https://dify.example.com/v1/files/upload
剩下的就是确认分段任务已入队
docker compose logs worker --tail 30
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
中途换过一次思路,把范围缩到最小的那一层,反而快了。
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
改完先别撤,确认这几项。20MB 文件上传返回 200 并生成 file_id,知识库分段任务正常入队。
容易忽略的是,上传限制常常有三层,改完 nginx 还要确认应用侧和网关侧,否则现象不变。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
