配置NginX代理以保留从代理后端服务器

时间:2017-09-11 22:53:57

标签: nginx chunking

有关NginX代理的问题,有没有办法控制块大小(即模仿代理编辑的后端服务器发回的块,不打破块)

我有一个后端服务器,用于返回对客户端的分块响应,其中每个块都设置为完整的音频部分。

当在NginX代理服务器后面运行时,NginX似乎将后端服务器返回的完整块分成更小的块。所有数据都正确发送,但服务器返回的原始块被分成几个较小的块

以下是示例输出

2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 1414 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 11360 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 2840 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 2840 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 2840 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 2840 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 704 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 2834 bytes 2017/09/11 17:16:20 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 7100 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 9940 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 4260 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 1420 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 2019 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 4254 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 14200 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 1398 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 379 bytes 2017/09/11 17:16:21 DEBUG - com.nuance.httpservlet.utils.HttpTtsParser:readChunk 0 bytes

从服务器端日志7捕获,前端22838字节(1414 + 11360 + 840 + 2840 + 2840 + 2840 + 704)最初由后端服务器作为单个块发送,

我玩过proxy_buffer_size,proxy_buffering和proxy_busy_buffers_size,但我找不到强制NginX维护与后端相同的块的方法(即使有大量的缓冲区大小和数字),这里是我用过的设置那个测试(不是最优的,我知道,但明确慷慨,以帮助缩小问题范围)

proxy_buffer_size 5m proxy_buffering:100 5m
proxy_busy_buffers_size:5m

我通过文档和论坛进行了扫描,但是我无法找到一种方法来强制NginX保持服务器返回的块。

我看到有一种方法可以禁用chunked_transfer_encoding但是这不是我想要的,我想要的是保持chunked_transfer_encoding并控制NginX以模仿与原始后端相同的分块

如果您有任何提示,请告知。

谢谢

1 个答案:

答案 0 :(得分:0)

在查看nginx代码并使用支持电子邮件组启动线程(但尚未回答)之后

我们发现HAProxy有这个非常好的功能,当我们测试时,解决了问题....

选项http-no-delay 没有选项http-no-delay   指示系统支持HTTP中的低交互性延迟而不是性能

通过指示系统等待足够的数据可用以便仅发送完整数据包来支持性能的网络优化。每次往返的典型延迟大约为200毫秒。

我们运行HAproxy且禁用此选项....因此正确读取了块并正确转发