nginx proxy_buffer导致请求失败

kyaa111 2月前 ⋅ 372 阅读

chrome提示net::ERR_INCOMPLETE_CHUNKED_ENCODING

一个接口部署在ecs上, postman访问可以, 前端项目访问失败

请求成功的是没有经过nginx, 失败的是通过nginx转发 /api/xxx

java报错

ClientAbortException: java.io.IOException: Broken pipe

查看nginxerror.log

2024/02/26 11:37:36 [crit] 6577#0: *22572869 open() "/usr/local/nginx/proxy_temp/5/18/0000004185" failed (13: Permission denied) while reading upstream, client: xx.xx.xx.xx, server: , request: "POST /api/xx/xx/xx HTTP/1.1", upstream: "http://xx.xx.xx.xx:xx/xx/xx/xx", host: "xx.xx.xx.xx"

临时修改对应目录的权限, 报错消失

因为nginx配置了proxy_pass转发api, 而关于proxy缓冲区的配置

htthttps://docs.nginx.com/nginx-management-suite/acm/how-to/policies/http-backend-configuration/#buffers

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffers

官方文档介绍很清楚

proxy_buffer_size 配置为 4 KB 或 8 KB。该指令设置用于读取从代理服务器接收到的响应的第一部分的缓冲区大小
proxy_buffers 配置控制为请求分配的缓冲区的大小和数量。增加缓冲区数量可以缓冲更多信息
如果内存无法容纳完整的响应,则可以将一部分保存到磁盘上的临时文件中

但是因为我们请求的响应体过大, 所以超出了内存中的缓存, 按逻辑将要写入磁盘.
但nginx又没有这个目录的权限, 所以导致失败