这段时间生产环境出现文件上传失败的问题,于是开始排查问题
按照惯例,先看前端请求和响应情况:直接报的500,还有Access-Control-Allow-Origin:
前端同志猛地一看,说很明显是跨域了。
既然是跨域,那就用解决跨域的方案处理。
网上处理方案一抓一大把,什么注解配置等等,然鹅事情并没有想象中顺利,因为这些后端代码本来就有的。
经过排查发现,这个跨域问题只有文件上传接口会有。并且请求并没有直接进入后端,后台逻辑代码也没有执行。
所以目光转向了前端请求发送到后台中间这个过程,中间只有一个nginx,问题很有可能出在这里。既然是nginx,那么是不是nginx将文件上传的数据拦截了?如果拦截了,为什么会拦截。
找了下资料,nginx确实会对大小超过一定值的请求数据做拦截。为了证实,特意用了一个极小的文件和一个常规文件做实验。结果小文件顺利上传,正常文件直接被拦截,nginx响应500,浏览器报跨域。
所以理论上来说,这似乎并不是真的跨域
最终解决方案:在nginx的配置文件中,http下面新增两行代码:
client_max_body_size 20m;
client_body_buffer_size 500m;
完事~~~
后续。。。。。。问题再次重复出现,最终发现是服务器硬盘满了,清理了一大堆不要的日志文件,最终解决