Nginx -413-上传文件太大

文章讲述了在Nginx中遇到413REQUEST_ENTITY_TOO_LARGE错误时,如何调整配置以允许更大文件上传,包括设置client_max_body_size、keepalive_timeout、send_timeout等参数。同时,也提醒注意应用服务器如Tomcat的上传限制,并提供了SpringBoot中配置上传文件大小的示例。

Nginx -413-上传文件太大

nginx里请求默认最大size为1M。 所以当上传文件的大小超过1M的时候会出现错误 http response code:413 REQUEST_ENTITY_TOO_LARGE 上传文件太大。

问题及方案

一开始我只设置client_max_body_size:50m, 错误“REQUEST_ENTITY_TOO_LARGE 上传文件太大 ”没有了,但是上传文件时有开始报 “ Failed to load resource: net: ERR_CONNECTION_RESET”,连接被重置了,我猜测连接因为什么原因被重置了, 所以我调大了指令keepalive_timeout的值为 650, 然后再上传大文件就可以了, 但是第二天有出现了 “ Failed to load resource: net: ERR_CONNECTION_RESET”, 参考https://www.cnblogs.com/kikyoqiang/p/16878961.html 博文, 添加了指令: send_timeout 650 (指定nginx发送response 给client的超时时间), 测试了上传15M的数据可以了,之后上传文件就可以了。

最后nginx的配置如下

nginx支持大文件上传的配置:

   
  http {
 		keepalive_timeout  650; # 客户端和nginx是长连接, 
    client_body_timeout      600;
    send_timeout 650;
    proxy_connect_timeout     60s; # nginx到后台server的连接的超时时间
    proxy_read_timeout      1m;  # nginx从后台server的读数据的超时时间
    proxy_send_timeout      1m; # nginx发送数据到后台server发送时间
    client_max_body_size  50m; #请求体的阈值
    client_body_buffer_size 500m; #Buffer的大小
    client_body_temp_path  /usr/local/nginx/client_body_temp 5 5; #如果buffer用完了,则把上传的数据写到client_body_temp_path指令配置的路径

  }
  

参数说明:

  • client_max_body_size 50m; 指定请求体的大小阈值 改完request body大小为50m

  • keepalive_timeout 650 650 指令的第一个值指定客户端到web server的连接超时时间,如果是0,连接为短连接; 第二个值为:在response header 添加一个参数“ “Keep-Alive: timeout=650””

    The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections.

  • send_timeout nginx发送response 到client的超时时间

但是还有一点需要注意,过来nginx这一关,请求就进入到application server,如tomcat,在tomcat 或者 spring web mvc里对上传文件的大小也有设置, 如果超时指定的阈值,仍让会报错。

Spring Boot里上传文件的配置

在spring boot里指定上传文件大小阈值的配置如下:

spring:
  servlet:
    multipart:
      location: /data/temp  #保持上传图片的临时路径
      enabled: true
      max-file-size: 20 #最大文件的size
      max-request-size: 30  #最大请求的size
Nginx 中调整上传文件小限制,主要通过配置 `client_max_body_size` 指令来实现。该指令用于控制客户端请求体的最允许小,若上传文件小超过此限制,则会返回 413(请求实体太大)错误[^3]。 ### 配置方法 `client_max_body_size` 可以放置在 Nginx 的不同配置块中,包括 `http`、`server` 和 `location` 块,具体取决于需要应用限制的范围。 #### 全局设置(适用于所有站点) 将配置添加到 `http` 块中,可以全局生效: ```nginx http { client_max_body_size 100M; } ``` 这将允许客户端请求体最为 100MB[^4]。 #### 站点级别设置(适用于特定域名或IP) 在 `server` 块中设置,仅对当前虚拟主机生效: ```nginx server { listen 80; server_name example.com; client_max_body_size 50M; location / { proxy_pass http://backend; } } ``` 上述配置将上传文件小限制为 50MB,适用于整个网站[^2]。 #### 路径级别设置(适用于特定路径) 如果希望只对某些 URL 路径放宽或收紧上传限制,可以在 `location` 块中进行配置: ```nginx location /upload/ { client_max_body_size 200M; client_body_buffer_size 256M; proxy_pass http://upload_backend; } ``` 此配置表示 `/upload/` 路径下允许上传为 200MB 的文件,并且设置了较的缓冲区以提高性能[^3]。 #### 禁用小限制 如果希望完全禁用上传小限制,可以将值设为 `0`: ```nginx client_max_body_size 0; ``` 不过,这种做法通常不推荐,因为它可能导致服务器资源被滥用。 ### 注意事项 - 修改完 Nginx 配置后,必须重新加载配置使其生效,通常使用命令 `nginx -s reload`。 - 如果使用了反向代理后端服务(如 PHP、Node.js 等),还需要检查后端服务本身的上传限制设置,例如 PHP 中的 `post_max_size` 和 `upload_max_filesize` 参数。 - 浏览器通常不会很好地处理 413 错误,因此建议前端也做适当的提示和校验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值