NGINX反向代理为何不能边收边发?

张小盒 2020-3-1 1364

刚刚注意到这个问题,在请求大文件时,源站到反向代理之间的数据流量一直在走,但是反向代理却一直不发数据出来,客户端浏览器一直处于等待状态,反向代理缓存完源站传来的数据后,客户端才能成功请求到数据。这样导致没有缓存的视频基本上没法看。

不是说NGINX可以边收边发吗,有人知道怎么解决吗,我尝试在配置中添加 proxy_buffering off; 没有变化。

最新回复 (8)
  • 张小盒 2020-3-1
    引用 2

    尝试关闭缓存后正常了,但都是静态大文件,不缓存不行啊。

    proxy_pass http://10.10.10.10:80/;
    proxy_set_header Host $host;
    proxy_cache_key $scheme$host$request_uri;
    proxy_cache appnode_proxy_cache_zone_of_site_fileserver;
    proxy_cache_valid 200 180d;
    proxy_cache_min_uses 1;
    proxy_cache_methods GET HEAD;
    proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
    proxy_cache_revalidate on;
    proxy_cache_lock on;
    proxy_cache_lock_timeout 90s;

    这个缓存配置有什么问题吗?

  • 张小盒 2020-3-1
    引用 3
    类似问题 https://segmentfault.com/q/1010000005125686 。

    莫非NGINX就这样……

    测试只保留前三行的 proxy_cache_* 配置也没办法边收边传。完全关闭缓存就正常。

    放弃了,先这样吧,希望有高人能解决。
  • 张小盒 2020-3-2
    引用 4

    更新:测试.zip文件正常。看来只是视频存在这样的问题……刚看到NGINX有个MP4模块,是不是得安装上这个东西?

  • 虚竹 2020-3-2
    引用 5
    应该是设计如此,要边收边发,就需要关掉缓存。
  • 张小盒 2020-3-2
    引用 6
    再补充,经测试,直接下载.mp4文件也是正常的,无法播放是因为在代理服务器从源站获取到整个文件前不能支持range请求。正在尝试解决中……
  • 张小盒 2020-3-2
    引用 7

    我查了些资料,说从NGINX 1.9.8版本开始可以编译进一个 ngx_http_slice_module 模块,以支持 range 请求的回源。

  • 虚竹 2020-3-2
    引用 8

    如果要用到到后端的Range请求,可以参考下nginx的缓存切片功能:
    https://nginx.org/en/docs/http/ngx_http_slice_module.html

  • 张小盒 2020-3-2
    引用 9
    虚竹 如果要用到到后端的Range请求,可以参考下nginx的缓存切片功能: https://nginx.org/en/docs/http/ngx_http_slice_module.html
    谢谢,已解决。这个文档我之前看到了,我还以为要更新的版本才支持,原来当前用的就是最新版本,只需要加入配置就行了。
返回
发新帖