0x0 问题现象
用户端浏览器有如下报错:
500 Internal Server Error
http code 500,但upstream后端未明显报错,那么可以确定是nginx错误,在nginx日志中看到到如下内容,猜测是文件太大而nginx设置的buffer太小出错
2022/01/25 09:51:47 [crit] 17901#0: *635241 open() "/usr/local/tengine/client_body_temp/0000001322" failed (13: Permission denied), client: 172.16.xx.xx, server: xxx.xxx.org.cn, request: "POST /whhscy/api/fileupload/services/upload HTTP/1.1", host: "xxx.xxx.org.cn", referrer: "https://xxx.xxx.org.cn/whhscy/SCHSJC/app/hsjc.app/miniprogram/index.mpg?:embedded=true&:drillPage=%2FSCHSJC%2Fapp%2Fhsjc.app%2Fminiprogram%2Frccy%2Frycydj_new_2.spg%3Fhyfs%3D1000%26:newData%3Dtrue%26pageCache%3DcreatePage%26cydd%3D%25E4%25B8%259C%25E8%25A5%25BF%25E6%25B9%2596%25E5%258C%25BA%25E7%258E%25AF%25E6%25B9%2596%25E4%25B8%25AD%25E8%25B7%25AF90%25E5%258F%25B7%26cyrq%3D20220125%26ssrq%3D7%26sglydw%3D4201190029221%26jcjgdm%3D420103010%26jcjgmc%3D%25E6%25AD%25A6%25E6%25B1%2589%25E8%2589%25BE%25E8%25BF%25AA%25E5%25BA%25B7%25E5%258C%25BB%25E5%25AD%25A6%25E6%25A3%2580%25E9%25AA%258C%25E6%2589%2580%25E6%259C%2589%25E9%2599%2590%25E5%2585%25AC%25E5%258F%25B8%26bblx%3D57%26bllx%3D9%26cyrw%3DCY006487%26cydw%3D4201190029221"
0x1 排查解决
- 这个问题直接原因就是因为客户端的post body太大,超过nginx配置的buffer大小,然后写入临时文件时又没有权限导致,有几个解决方案
- 解决buffer太小的问题,使得body可以存储在buffer中,但很多时候无法精准的控制用户的最大body大小,并且过大的值在高并发下必定会占用更多内存
- 解决文件夹权限问题,使得buffer不足得时候文件能否写入临时目录中,也可以规避此问题,一般可以设置nginx的启动user root,或者修改此文件夹权限