• 【解决问题】413错误 413 Request Entity Too Large 接口返回413 报413nginx



    博客背景:JAVA项目,前端想弄个便捷富文本,直接很多图片转base64编码直接存库了。字段为longtext类型。
    这种问题通常是在使用http请求对象太大的时候。。

    问题排查

    1、如果是超长的话varchar类型改成longtext类型。
    2、依旧怀疑超长的话,搜了一下longtext的最大长度

    mysql里3种text类型的最大长度如下:
    ● TEXT 65,535 bytes ~64kb
    ● MEDIUMTEXT 16,777,215 bytes ~16Mb
    ● LONGTEXT 4,294,967,295 bytes ~4Gb

    肯定没超长,就直接去线上看了请求。。很直接。。
    需要修改nginx请求的默认大小

    在这里插入图片描述

    解决方案

    1、修改nginx配置文件nginx.conf

    限制请求体的大小,默认1m,若超过所设定的大小,返回413错误。

     client_max_body_size     50m; 
    
    • 1

    读取请求头的超时时间,若超过所设定的大小,返回408错误。

     client_header_timeout    1m;
    
    • 1

    读取请求实体的超时时间,若超过所设定的大小,返回413错误。

     client_body_timeout      1m;
    
    • 1

    http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒

     proxy_connect_timeout     60s;
    
    • 1

    http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒

     proxy_read_timeout      1m;
    
    • 1

    http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒

     proxy_send_timeout      1m;
    
    • 1

    (1)可以在http{ }中设置:client_max_body_size 20m;
    (2)也可以在server{ }中设置:client_max_body_size 20m;
    (3)还可以在location{ }中设置:client_max_body_size 20m;

    http{} 中控制着所有nginx收到的请求。
    如果配置在server{}中,则控制该server收到的请求报文大小。
    如果配置在location中,则报文大小限制,只对匹配了location 路由规则的请求生效。

    nginx.conf文件:

    http{
    #控制全局nginx所有请求报文大小
    #client_max_body_size   20m;
                     server{
     #控制该server的所有请求报文大小
     #client_max_body_size   20m;
                             location a {
                             }
                             location b{
     #控制满足该路由规则的请求报文大小
     #client_max_body_size   20m;
                             }
                     }
                     server {
                     }
          }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2、更新完成后需要重启nginx

     sudo systemctl restart nginx
    
    • 1

    3、其他可能性

    Tomcat
    Tomcat的server.xml中,maxPostSize参数会限制post请求报文体的最大值,默认值是2M(2097152 (2 megabytes).)
    如果server.xml中并没有配置的话,就是默认参数值。

    前端
    node服务使用Egg.js框架,而Egg的配置jsonLimit,会限制json报文体的大小。
    如果没有配置的话,默认是100k。

    参考:https://blog.csdn.net/weixin_32006353/article/details/115981342
    https://blog.csdn.net/z69183787/article/details/83070275

  • 相关阅读:
    AI读懂中国,文心方可雕龙
    QGis软件 —— 9、QGis - 由点绘制热力图来模拟人流量(绘制点方式、excel导入数据方式)
    年年出妖事,一例由JSON解析导致的"薛定谔BUG"排查过程记录
    CSS 样式
    [数据分析与可视化] 基于matplotlib和plottable库绘制精美表格
    模型/视图 及 各类的继承关系
    某黑产组织最新攻击样本利用BYVOD技术的详细分析
    GOPS现场 | 对话龙智董事长何明,探讨DevOps安全新概念
    决策树与随机森林
    神经系统图 基本结构图,大脑神经网络结构图片
  • 原文地址:https://blog.csdn.net/weixin_44436677/article/details/128124312