我有一个在谷歌云中运行的容器,并在同一云中运行一个Mysql Db。它通过 API 接收 json 数据。处理数据时,我将数据写入数据库。
5 分钟内大约两次我收到以下日志条目:
2023/11/27 12:27:09 [warn] 15#15: *39 a client request body is buffered to a temporary file /var/lib/nginx/client_body_temp/0000000020,
尽管这只是一个警告,但它在我的日志中作为错误出现。所以它会向我的日志发送错误信息,我想摆脱它。
我对 nginx 还没有太多经验,所以我查找了值“client_body_buffer_size”,发现它是 proxy.conf 的一部分
我的设置还没有代理配置,所以我添加了一个简单的配置:proxy.conf 并将其放置在位于 /etc/nginx/proxy.conf 的 Docker 构建脚本中
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 1m;
client_body_buffer_size 1m;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
之后,我烦人的错误消失了,但我遇到了一个更严重的错误:我的数据库收到“操作超时”错误,并且我的数据无法再写入。因此,我当然恢复了该配置并删除了 proxy.conf,现在又回到了第一个错误。
消除标题错误的正确方法和位置是什么?我可以将 client_body_buffer_size 参数添加到 httpd.conf 中吗?
我应该补充一点,发送回的数据不像图像那样大。它的大小可能为 250kb,甚至更大一些。
我已经在姐妹网站上提出了问题:https ://stackoverflow.com/questions/77556980/how-to-fix-a-client-request-body-is-buffered-to-a-temporary-file
client_body_buffer_size 是 的参数
nginx.conf
,而不是 的参数proxy.conf
。这意味着上传文件的大小大于为上传保留的内存缓冲区。该内存仅在上传请求时使用。一旦它被传递到后端,内存就会再次释放。将上传缓冲在 RAM 中而不是在磁盘上的临时文件中是一种性能优化。如果请求大于此值,它将转到临时文件,并且错误日志中会出现警告。
如果您有能力为偶尔的文件上传保留这么多内存,则可以将其设置为比默认值更大的值。