2016-01-26 95 views
3

我有一个接收每个传输中从1K到20MB数据的任何地方的API。我也有一个网站,一次只能收到少于10K的传输。 API和网站都在同一个Nginx代理服务器后面。针对大型POST请求的Nginx client_body_buffer_size和client_max_body_size优化

从文档为client_body_buffer_size

如果请求体大小大于缓冲区的大小以上,则整个(或部分)请求体被写入到一个临时文件。”

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

鉴于我可以接收大的有效载荷,最好是将client_body_buffer_size设置为client_max_body_size,对我来说是20MB?我认为这会阻止nginx每次将请求写入磁盘。

设置client_body_buffer_size这么高有什么后果吗?这会影响网站,它从来没有收到如此大的要求?

回答

2

我建议使用较小的client_body_buffer_size(大于10k但不是那么多,也许x64默认为16k),因为更大的缓冲区可以缓解DoS攻击媒介,因为您会为它分配更多的内存,而不是磁盘这更便宜。

请注意,您也可以在特定服务器或位置(请参阅Context)上设置不同的client_max_body_sizeclient_body_buffer_size,以便您的网站不允许20MB上传。

这里有一个interesting thread on client_body_buffer_size,它还提醒说,如果客户端身体大于client_body_buffer_size,则nginx变量$ request_body将为空。