最近需要大范围使用ElasticSearch,以前这个一直是我的薄弱项(现在也还是!)
接手的一个较老的项目中,使用的第三方包(bboss)中的接口查询的ElasticSearch,里面的方法和官方给的略有一点区别。涉及到了我的知识盲区。但是原始的业务的查询逻辑很有一点复杂不方便更改现有逻辑,只能照着前人的路子改下去。
报错截图
我的解决思路
代码运行起来看不到一点错误,这还是使用了try-catch打印出来的。
debug下去一步一步看起来,到源码发送请求的地方,直接就返回了异常。隐约感觉到是请求的问题。但是实在想不出能有什么办法解决。
使用了postman发送请求,才指出了问题可能的发生原因。出现了一个413Request EntityToo Large报错
项目上使用的都是阿里的私有云上产品,私有的云上ElasticSearch需要使用私有云的ECS安装Nginx代理出来(个人项目上逻辑,不代表所有的逻辑都是如此)再通过SLB负载均衡代理到公网进行使用。
通过查询相关的报错解决办法,才算是知道上述报错的根因。3万多行的文本造成请求体过大,被Nginx给拦下了。
问题根因
Nginx默认上传传文件的大小限制是1M,就有点无语的很!查了大半天这个问题。
具体解决
413Request EntityToo Large错误解决办法
参考了该文档,对Nginx的配置进行了更改,重启Nginx后。该报错消失。
client_max_body_size 20M
可以选择在http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;
三者有区别
设置到http{}内,控制全局nginx所有请求报文大小
设置到server{}内,控制该server的所有请求报文大小
设置到location{}内,控制满足该路由规则的请求报文大小
做个记录,下次再有类似的问题,自己也能知道这个方向也可以先排查一下。
萌新第一次写博客,涉及到了什么问题,还请大佬指出,我一定努力更正。