上线后用四项指标验证效果



Nginx 静态文件默认支持范围请求,但如果前面还有 CDN、对象存储或反向代理,需要逐层检查是否错误删除了 Ra🌅nge 请求头。普通 MP4 文件可以使用下面的基础配置作为起点:



如果 Nginx 前面连接 CDN,或者 Nginx 后面还有应👍用服务、对象存储,视频请求的瓶颈可能出现在回源链路。应确认上游是否支持 Range,是否正确返回 Content-Length、Content-Type 和 Content-Range,以及 CDN 是否缓存了分片。



Nginx 不会自动降低视频码率,也不会把一个 4📌K 文件变成适合移动网络播放的版本。想让不同网络条件下都保持流畅,通常需要准备多档清晰度和码率,并让播放器根据实时带宽进行自适应切换。



Nginx解决不了的部分,要从编码和播放器入手



对于普通 MP4 视频,应重点配置字节范围请求、sendfile、合理缓存和 MP4 元数据位置;对于 HLS 视频,则要分别优化播放列表与分片缓存,并配合多码率自适应☀️播放。先确定视频🌈类型,再选择对应方案,比盲目堆叠 Nginx 参数更有效。



MP4、WebM、TS 和 M4S 已经属于压缩后的媒体格式,继续使用 gzip 往往会增加 CPU 消耗,却很难明显减少传输体积。因此,视频二进制文件一🎇般应关闭 gzip。



HLS 通常由一个或多个 m3u8 播✨放列表,以及大量 ts 或 m4s 分片组成。这两类文件的更新频率不同,不能使用完全相同的缓存时间。



MP4 直出时,先保证拖动和分段请求正常



静态视频传输可以使用 sendfile on,让文件数据更高效地从文件系统交给网络层,减少不必要的用户态拷贝。tcp_nopush on 通常与 sendfile 一起使用,有助于减少发送大量小数据包的情况。



固定不变的点播视频适合使用带版本号的文件名,例如更换视频后改变文件路径,而不是覆盖同一个地址。这样可🤔以放心设置较长缓存,也能避免用户因为旧缓存继续播放过期文件。带权限的视频则要谨慎设置公共缓存,避免🌺不同用户之间发生内容越权。



举报/反馈