我有一个API,可以在每次传输中接收1K到20MB的数据.我还有一个网站,在一次传输中只能接收不到10K的网站.API和网站都位于同一个Nginx代理服务器之后.
来自文档 client_body_buffer_size
如果请求主体大小超过缓冲区大小,则整个(或部分)请求主体将写入临时文件."
这意味着每当我收到超过默认值的请求时,它都会被写入磁盘.
鉴于我可以接收大的有效载荷,最好设置client_body_buffer_size等于client_max_body_size,对我来说是20MB?我认为这会阻止nginx每次都将请求写入磁盘.
client_body_buffer_size如此高的设定会有什么后果吗?这会影响到从未收到如此大规模请求的网站吗?
我建议使用更小的client_body_buffer_size(大于10k但不是那么多,可能是16k的x64默认值),因为更大的缓冲区可以缓解DoS攻击向量,因为你会为它分配更多的内存,而不是更便宜的磁盘.
请注意,您还可以设置不同的client_max_body_size和client_body_buffer_size特定的服务器或位置(见上下文),这样你的网站不会允许20MB上传.
这是一个有趣的线程client_body_buffer_size,它还提醒如果客户端体大于你的client_body_buffer_size,则nginx变量$ request_body将为空.
这取决于您的服务器内存和您有多少流量。
一个简单的公式:MAX_RAM = client_body_buffer_size X并发_流量 - OS_RAM - FS_CACHE。
(与 php-fpm 池调整甚至 mysql/elasticsearch 完全相同)。
关键是监控所有的东西(RAM/CPU/流量)并根据您的使用情况更改设置,当然先少加星号,然后增加直到可以为止。
| 归档时间: |
|
| 查看次数: |
15287 次 |
| 最近记录: |