Nginx client_body_in_file_only用于file upload性能

在我的应用程序中,我有我的应用程序服务器(独angular兽)的nginx代理。

我正在努力提高我的file upload性能。 我已经通过各种技术阅读,可以防止在上传文件时阻止应用进程被阻止。 目前关于处理这个问题的最好方法的信息似乎很难(见这个问题 )。

我正在尝试使用client_body_in_file_only on; 据我了解,它告诉nginx缓冲整个请求到磁盘。

我感到困惑的是,即使没有这个指令,我在我的nginx日志中看到这个:

2014/10/10 17:41:43 [warn] 50331#0: *798 a client request body is buffered to a temporary file /usr/local/var/run/nginx/client_body_temp/0040665399, client: 127.0.0.1, server: my_site.dev, request: "POST /upload HTTP/1.1", host: "my_site.dev", referrer: "https://my_site.dev/upload"

它看起来像nginx缓冲file upload到磁盘无论如何。 nginx是不是在这里开箱即可? 我还应该使用client_body_in_file_only吗? 我误解了这里发生了什么?

如何通过使nginx缓冲到磁盘来提高上传性能? 每次接收到字节(由传输的MTU限制是最好的情况下,或在最坏的情况下,1b有效载荷的networking数据包),这些将被写入磁盘。 通常,人们试图避免请求访问磁盘的时间,因为它是一个缓慢的设备…

client_body_in_file_only其文档中所述, client_body_in_file_only主要用于debugging,当你希望保留一份客户端的请求体进行进一步的分析时。 被警告,设置为on使得nginx保留所有的请求文件, 一旦请求被处理不会删除它们 。 价值clean做到这一点。

那个指令并没有像你可能已经错误地理解(去)激活使用磁盘缓冲本身那样 。 你看nginx使用磁盘来缓冲请求体,因为它的RAM缓冲区不能包含它们。 它警告你,因为它很可能会对服务器性能造成非常不利的影响。

你可能希望放大你的client_body_buffer_size这样file upload将尽可能地保留在RAM中,然后再用最less的写入数量写入磁盘。