如何解决Nginx控制器块传输编码/数据流/请求主体缓冲
嗨,我们正在使用以下配置:
- Kubernetes版本1.16.13
- Nginx入口控制器图像:控制器:v0.34.1(最新)
建筑:
- 具有SSL证书/ SSL终止功能的Azure应用网关标准V2(NO AWF)
- Azure Kubernetes服务(AKS)
问题描述:
每当我们上传POST大文件时,Nginx都会先读取整个客户端体请求,然后再将其发送到API。请求来了-> Nginx读取了100%的请求主体并将其缓冲到temp目录,在接收到完整的主体之后,它开始将数据发送到实际的API,该API将数据流式传输到BLOB存储。
我们的目标是什么:Nginx收到正文请求后,便立即将部分数据重定向到API
已完成的操作:为API入口添加了注释:
nginx.ingress.kubernetes.io/proxy_request_buffering off;
将以下内容放入主Configmap中:
chunked_transfer_encoding: "on"
检查了入口容器中的nginx.conf-成功应用了新配置
发生了什么:Nginx停止将主体请求缓冲到临时文件,但是仍然不会重定向数据,在WebUI中,我们看到99%的“正在上载”,应用程序日志(在调试级别)没有任何作用,在99%的情况下,我们开始看到API上的日志以及将数据流传输到BLOB存储的情况,
我们通过使用来测试了直接上传到Java Spring应用 kubectl port-forward命令和通过Postman直接进行POST请求-应用程序按预期工作,它在接收到数据时将数据块发送到BLOB。
经过各种尝试/测试,我们在互联网上找到了另一个自定义标头,并应用于configMap级别:
X-Accel-Buffering: "no"
这两个配置均无济于事,之后我们开始将所有缓冲值设置为“ off”和“ 0”-均无济于事,
根据官方文档 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering 如果proxy_request_buffering被禁用,则请求正文将在收到请求后立即发送到代理服务器,但该指令根本不起作用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。