jwilder/nginx-proxy配置client_max_body_size不生效,文件上传报413求助
解决步骤
1. 修正Nginx代理配置
你使用的jwilder/nginx-proxy镜像会自动为每个托管服务生成独立的站点配置文件,存储在/etc/nginx/conf.d/目录下,你手动在nginx.conf中添加的无明确域名的默认server块不会匹配你的业务请求,优先生效的是自动生成的带server_name的站点配置。
首先进入Nginx容器验证实际加载的配置:
docker exec -it <你的nginx-proxy容器ID/名称> nginx -T
输出的全量配置中,搜索你的业务域名对应的server块,检查client_max_body_size的实际值:
- 如需全局修改所有站点的上传限制:在宿主机新建
custom.conf文件,写入client_max_body_size 0;,将该文件挂载到nginx-proxy容器的/etc/nginx/conf.d/custom.conf路径,重启容器即可。 - 如需仅修改当前Node.js后端对应站点的限制:给你的Node.js服务在docker-compose配置中添加环境变量
CLIENT_MAX_BODY_SIZE: 0,重启Node.js服务和Nginx代理,代理会自动生成对应配置。
2. 排查Node.js后端的请求体限制
如果确认Nginx配置无误,该413错误就是Node.js后端返回的。你的文件是经过base64编码后放入请求体,base64编码会让数据体积增加约33%,很容易超出Node.js服务默认的请求体大小限制:
- Express框架修改参考:
// 调整json和表单请求体的大小限制,按需调整数值 app.use(express.json({ limit: '100mb' })); app.use(express.urlencoded({ limit: '100mb', extended: true }));
- Koa框架修改参考:
const bodyParser = require('koa-bodyparser'); app.use(bodyParser({ jsonLimit: '100mb', formLimit: '100mb', textLimit: '100mb' }));
修改完成后重启Node.js服务即可。
内容的提问来源于stack exchange,提问作者Josh Jacka-Easter
相关产品推荐
相关产品推荐

