Nginx错误413上传文件太大解决方法

发表时间
评论 没有

Nginx默认是上传一个不能超过1M大小的文件

nginx上传文件大小报错500的解决办法:

#设置 body内容大小为xxxM,

上传文件大小相关的有三个配置
  • client_body_buffer_size 配置请求体缓存区大小, 不配的话,
  • client_body_temp_path 设置临时文件存放路径。只有当上传的请求体超出缓存区大小时,才会写到临时文件中
  • client_max_body_size 设置上传文件的最大值

亲测:一般我们设置 client_body_buffer_size、client_max_body_size 即可!

实战demo:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name 127.0.0.1;
    add_header X-Frame-Options SAMEORIGIN;
    charset utf-8;


    ssl                  on;
    ssl_certificate      conf.d/ssl/server.crt;
    ssl_certificate_key  conf.d/ssl/server.key;

    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5:!DES:!3DES;
    ssl_prefer_server_ciphers   on;
    ssl_dhparam  conf.d/dhparams-2048.pem;


    limit_conn  one  1000;
    limit_conn perserver 10000;
    #limit_req   zone=allips  burst=5  nodelay;

    location /api {
        client_max_body_size 600M;
        client_body_buffer_size 600M;
        uwsgi_send_timeout 1800;
        uwsgi_connect_timeout 1800;
        uwsgi_read_timeout 1800;
        proxy_read_timeout 1800;
        proxy_connect_timeout 1800;
        proxy_send_timeout 1800;
        include      conf.d/uwsgi_params;
        uwsgi_pass   127.0.0.1:8889;
    }

————————————————

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里对上传文件的大小也有设置, 如果超时指定的阈值,仍让会报错。

作者
分类 电脑网络

评论

本文评论功能已关闭。

← 较早的 较新的 →

相关文章