针对大型POST请求的Nginx客户端\正文\缓冲区\大小和客户端\最大\正文\大小优化

针对大型POST请求的Nginx客户端\正文\缓冲区\大小和客户端\最大\正文\大小优化,nginx,Nginx,我有一个API,可以在每次传输中接收1K到20MB的数据。我还有一个网站,在一次传输中只能接收不到10K的数据。API和网站都位于同一个Nginx代理服务器后面 来自客户机\u正文\u缓冲区\u大小的文档 如果请求正文大小大于缓冲区大小,则整个(或部分)请求正文将写入临时文件。” 这意味着任何时候我收到一个默认的请求,它将被写入磁盘 考虑到我可以接收大的有效负载,最好将客户机\u body\u buffer\u size设置为客户机\u max\u body\u size,对我来说是20MB?我

我有一个API,可以在每次传输中接收1K到20MB的数据。我还有一个网站,在一次传输中只能接收不到10K的数据。API和网站都位于同一个Nginx代理服务器后面

来自
客户机\u正文\u缓冲区\u大小的文档

如果请求正文大小大于缓冲区大小,则整个(或部分)请求正文将写入临时文件。”

这意味着任何时候我收到一个默认的请求,它将被写入磁盘

考虑到我可以接收大的有效负载,最好将
客户机\u body\u buffer\u size
设置为
客户机\u max\u body\u size
,对我来说是20MB?我认为这将阻止nginx每次将请求写入磁盘


客户端\u正文\u缓冲区大小设置得如此之高是否会产生任何后果?这会影响从未收到如此大请求的网站吗?

我建议使用较小的
客户端\u正文\u缓冲区大小
(大于10k,但不会太大,可能是x64默认值16k),因为更大的缓冲区可以缓解DoS攻击向量,因为您将为其分配更多内存,而磁盘则更便宜

请注意,您还可以在特定服务器或位置上设置不同的
客户端\u最大\u正文\u大小
客户端\u正文\u缓冲区\u大小
(请参阅),以便您的网站不允许20MB上载


这里有一个示例,它还提醒您,如果客户端主体大于您的
客户端主体\u缓冲区\u大小
,nginx变量$request\u主体将为空。

这取决于您的服务器内存和您拥有的流量

一个简单的公式:MAX_RAM=客户机体缓冲区大小X并发流量-OS_RAM-FS_缓存

(与php fpm池调优甚至mysql/elasticsearch完全相同)


关键是监控所有内容(RAM/CPU/流量)并根据您的使用情况更改设置,当然要小加星号,然后再增加,直到可以为止。

您能否澄清“缓解DoS攻击向量”的含义?也许您的意思是“可能增加DoS攻击向量”。