问题:413 Request Entity Too Large
记录一次413 Request Entity Too Large解决的问题
1.对于有经验的开发着看见这个错误第一反应就是服务器的上传大小设置的不对那么修改服务器上传大小
对于nginx的配置有三个地方可以设置,
解决413的正常途径
分别是 http,server,location 根据实际情况设置具体的大小,
client_max_body_size 50m;
1
然而在本次问题中,设置之后发现配置未生效,还是一直报413的错误,以为是配置未生效,重启nginx,重启服务器,都未果,
由于不想影响业务直接reload导致的错误信息不明显 设置的级别最低,怕影响到全局
通过直接请求应用的服务器没问题,再次确定这次问题跟 nginx 的配置有关,通过调整lient_max_body_size的位置后错误信息变了,变为Gateway 504 Time out,超时,好像到这里问题就很明确了,由于这次请求的接口的主要业务是走的数据传输,数据交换,数据量比较大,时间比较长,超过了nginx默认的代理时长,再结合之前的错误信息发现,每次只要请求时间超过1分钟就立即报错,OK,那么接下来修改Nginx的代理超时时间配置,在location中设置一下内容,问题解决
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
1
2
3
反思
终究还是数据处理的太慢了,现在只有2k条数据处理花费了就有1分20秒,不太正常,那么怎么解决这种花费时间特别长的问题呢,这里提出几种思路
队列+异步
服务端接收到数据后,直接存放到队列里,然后直接返回结果,然后服务端的应用再去队列里取数据 ,如果有问题的话,再向请求方推送一条数据,这样可以大大的提升效率,减少数据的数据库操作的等待