必须同时调整nginx的client_max_body_size和spring boot的max-file-size与max-request-size参数,否则会分别返回413错误或maxuploadsizeexceededexception;还需同步调大超时设置、确保临时目录可写,并检查网关限制。

要让 Nginx + Spring Boot 部署环境支持大文件上传,必须同时调整 Nginx 和 Spring Boot 两层的限制,缺一不可。只改一边,请求会在对应层级被直接拦截,用户看到的错误也不同:Nginx 拦截返回 413 Request Entity Too Large;Spring Boot 拦截则抛出 MaxUploadSizeExceededException。
Nginx 层:放开客户端请求体大小
Nginx 默认限制 client_max_body_size 为 1MB,所有上传请求在进入后端前就被拒绝。
- 在
nginx.conf的http块、server块或具体location块中添加配置,例如:
client_max_body_size 2G;
- 推荐放在
http块,全局生效;若只需某接口支持大上传,可精确加在对应location /api/file/upload内 - 修改后必须执行
nginx -t && nginx -s reload生效,仅重启服务无效
Spring Boot 层:放宽 multipart 解析限制
即使 Nginx 放行了,Spring Boot 内置 Tomcat 还会二次校验,默认仍是 1MB。
- 在
application.yml中配置(注意缩进):
spring:
servlet:
multipart:
max-file-size: 2GB
max-request-size: 2GB
- 两个参数含义不同:
max-file-size控制单个文件上限;max-request-size控制整个请求(含多个文件+表单字段)总大小,建议设为相等或略大 - 若用
.properties,写成:
spring.servlet.multipart.max-file-size=2GB
spring.servlet.multipart.max-request-size=2GB
额外注意事项
有些场景下还需检查其他环节:
-
超时设置:上传大文件耗时长,需同步调大 Nginx 的
proxy_read_timeout和 Spring Boot 的server.tomcat.connection-timeout,避免连接中途断开 -
临时目录权限:Spring Boot 默认使用系统临时目录存上传中文件,确保该路径可写(也可通过
spring.servlet.multipart.location指定自定义路径) -
网关组件(如 Spring Cloud Gateway):如果前端还经过网关,它也有自己的请求体限制(如
spring.cloud.gateway.httpclient.response-timeout),需单独配置
只要 Nginx 和 Spring Boot 两边都配对且数值合理,2GB 以内的文件上传就能稳定通过。不复杂但容易忽略其中一层。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











