解决
1.推测原因:接口路径不存在 详细检测接口路径是否正确?
排查措施:重读代码路径,仔细自己拼装路径,postMan接口模拟线上访问,经排查不是此问题
2.继续推测是不是会不会因为上传打的包有问题–?
排查措施:访问此类中的其他接口一一访问的通–>推测不是文件缺失问题
linux命令sz下载可用的命令对应的class文件,直接使用idea查看class文件,或者通过jd反编译工具查看class文件是否缺失–>进一步确认不是文件丢失问题
3.继续推测路径正确的情况下访问404继续访问确认是不是上传文件问题?
排查问题:使用postMan上传自定义空文件上传成功由此可以推断确实是上传文件的问题,由此多上传了几个文件发现当文件大小超过10k的时候就会报404错误
4.继续推测是不是springMVC上传文件大小查找错误文件找不到 报404?
排查问题:设置了springMVC上传文件大小继续上线测试还是有这个问题,同时在测试环境测试却没有这个问题,由此排查不是代码问题那是环境问题
5.推测是是否是nginx环境问题?
重新在线上启动了一个项目重写写了一个上传接口,还是有问题,进一步确认是环境问题
6.考虑到会不是nginx参数设置最大传输字节数的问题?
查看nginx.conf 看配置文件.已经存在 client_max_body_size 50M 并且设置的是50M.
查看nginx的error.log 每次访问都会有权限被拒绝的情况展示:
019/08/02 18:37:35 [crit] 437115#0: *34 open() “/usr/local/nginx/temp/0012414” failed (13: Permission denied)
小文件可以大文件不行,推测我们写的是大文件,所以nginx对大文件的传输会先缓存到某个目录,而此用户明显没有缓存成功被拒绝了
7.推测否是用户权限不够
nginx默认以nobody用户运行的,–>将其修改成root用户,经测试成功.
总结:
出现线上问题的时候先不要胡乱猜测,先认为自己代码是正确的先排查环境问题,首先查看nginx的日志,在看项目日志,可以提高排查问题的速度.