关于 请求时 body 过大导致nginx 拒绝服务500 问题记录

334 阅读1分钟

问题背景:

今天收到一个接口在遇到500错误, 但请求body为空时,服务可以收到请求,

正常发送大数据,大约1.6万个字符,出现500错误,但服务并没有挂掉.去查看nginx的error.log ,发现var/lib/nginx/tmp/client_body/0000000018" failed (13: Permission denied)错误,实际原因是因为 nginx缓冲区不能处理对应数据量, 所以会在上边路径创建临时文件进行处理.

但Nginx用户并没有此权限. 775了以后也不行(应该是哪里没有处理好).

解决办法:

需要设置请求体缓冲区大小 client_body_buffer_size 128k; 可以在http,location等作用域下设置,下为示例

http {
2    ...
3    # 或者在 server 块内
4    server {
5        listen       80;
6        server_name  localhost;
7
8        # 设置请求体缓冲区大小
9        client_body_buffer_size 128k;
10
11        # 其他配置...
12    }
13}

最终解决办法应该 对较大json数据进行压缩

以下为网上找到的一片文章截图.链接无法复制.

af1e2cac9e5e07ae417853b8e336e2e.png