Nginx 反向代理流媒体文件出现的加载缓慢问题

事情起因

有个Jellyfin的服务器,前端使用nginx进行反代,正常情况下浏览器访问流媒体文件,会自动分块请求,不需要加载整个文件即可开始播放,但是在前端套一层nginx反向代理以后,要加载很久才显示画面。

问题排查

首先nginx服务器和后端之间并没有网络连接速度慢的问题,排除掉了网络问题,
就首先怀疑是nginx的配置文件,
尝试关闭缓冲:

proxy_buffering off;  
proxy_request_buffering off;

无济于事,仍然播放缓慢。
而且发现一个很奇怪的问题,当浏览器关闭以后,前端已经断开连接了,
但nginx仍然持续不断从后端服务器上读取文件,而且流量巨大,似乎是试图读取整个媒体文件。

最后逐一排查配置项,
最后发现是nginx默认配置了一个缓存区

proxy_temp_path /www/common/proxy/proxy_temp_dir; 
proxy_cache_path /www/common/proxy/proxy_cache_dir levels=1:2 keys_zone=proxy_cache_panel:20m 
proxy_cache proxy_cache_panel; 

此配置导致nginx接收到请求以后,首先查询是否有缓存,有缓存则直接返回,没有缓存会从后端抓取完整文件,然后再返回给客户端。
问题根源也就在这里了。

问题解决

在反向代理配置里,关闭缓存:

proxy_cache off;

标签: none

添加新评论