open() "/usr/local/nginx/client_body_temp/0000001331" failed (13: Permission denied)

在本地开发测试前端把图片的base64字符串(因为在本地测试没有应用nginx, 对长度没有限制)传递给后台能够正常访问后台的接口,开发完成之后放到上线

结果调用我的接口就行不通了,前端调不通了,报了一个异常

500 Internal Server Error


nginx/1.6.3

后面追踪后,在/usr/local/nginx/logs/error.log 出现如下异常:

[crit] 31291#0: *1001123 open() "/usr/local/nginx/client_body_temp/0000001331" failed (13: Permission denied), client: xx.xx.xx.xx, server: yyyyyyy, request: "POST //skeleton/CommonImgRecognitionJsBean/obtainImageInfo HTTP/1.0", host: "zzzzzzzz", referrer: "https://zzzzzzzz/yyyyyyy/site/module/imageUpload.html"

后面查找原因结果是:

因为base64字符串的长度太长,上面标红的这个目录没有权限

引用 https://blog.csdn.net/gnicky/article/details/53315796

关于client_body_temp目录的作用,简单说就是如果客户端POST一个比较大的文件,长度超过了nginx缓冲区的大小,需要把这个文件的部分或者全部内容暂存到client_body_temp目录下的临时文件。

其实这样的处理流程也是无可厚非的,遇到body比较小,刚好header缓冲区又能够放得下,不用白不用,是不是?

 

解决办法:

1、拥有client_body_temp的权限,切换root用户, #chmod -R 755 /usr/local/nginx/client_body_temp

2、控制字符串长度,对图片进行压缩,再转成字符串

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值