文章目录

问题排查解决方案1、修改nginx配置文件nginx.conf2、更新完成后需要重启nginx3、其他可能性

博客背景: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;

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

client_header_timeout 1m;

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

client_body_timeout 1m;

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

proxy_connect_timeout 60s;

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

proxy_read_timeout 1m;

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

proxy_send_timeout 1m;

(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 {

}

}

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

sudo systemctl restart nginx

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

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: