针对大型POST请求的Nginx客户端\正文\缓冲区\大小和客户端\最大\正文\大小优化
我有一个API,可以在每次传输中接收1K到20MB的数据。我还有一个网站,在一次传输中只能接收不到10K的数据。API和网站都位于同一个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?我
客户机\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攻击向量”。