上海发布
上面的静态目录配置适合内容相对稳定的 MP4 文件。sendfile 可以减少用户态与内核态之间的重复拷贝,tcp_nopush 有助于合并响应头与文件数据,max_ranges 1 可以降低异常多范围请求带来的处理压力。open_file_cache 主要缓存文件句柄和元数据,不等于缓存完整视频内容,磁盘吞吐仍然决定大文件传输上限。
渐进式 MP4 代理配置中的 proxy_buffering off 会减少 Nginx 为响应💫内容进行额外缓存的机会,但上游连接会更长时间保持打开,适🔥合源站稳定且用户访问量可控的场景。源站响应速度不稳定时,关闭缓冲可能把源站抖动直接传递给播放器,不能仅凭单次测试决定开关。
proxy_s🎵et_hea💪der Connection "";
Nginx100%视频优化的重点不是把某个参数调到“100%”,而是让客户端能够按需读取视频字节范围,让静态文件绕开不必要的应用层处理,让重复访问命中缓存,并让连接数、带宽和磁盘 I/O 保持在可控范围。MP4 点播应优先处理 Range 断点请求、sendfile 和缓存策略;HLS 或 DASH 则应重点缓存视频切片、缩短源站响应时间。
视频服务器的文件描述符上限需要与 Nginx 连接上限匹配。worker_connections 设置很大而系统 nofile 仍然很低时,配置不会带来实际并发提升。磁盘为机械盘🔥时,大量用户同时拖动视频可能先触发随机 I/O 瓶颈;SSD、分层缓存或切片分发可以改善随机读取,但不能消除总带宽限制。
Nginx 视频服务的验收不能只🎨看播放器是否能够播放,浏览器网络面板和服务器指标需要同时检查。用户拖动到未加载位置时,应看到范围请求;服务器日志还应能区分客户端慢、源站慢、磁盘慢和带宽耗尽。
HLS 与 DASH 视频切片通常比完整 MP4 更适合缓存,因为播放器只请求当前需要的片段。点播播放列表可以设置较长缓存时间,直播播放列表则应设置较短时间或禁止长时间缓存;已经生成且不会改变的 ts、fmp4 或 m4s 切片可以使用更长 TTL。切片缓存时,鉴权参数不能被无条件忽略,否则可能造成不同用户共用不应共享的内容。
Nginx 静态视频传输通常原生支持字节范围请求,播放器拖动进度时会发送 Range 请求,并期待服务器返回 206、Content-Range 和正确的 Content-Length。只添加 Accept-Ranges 响应头不能凭空创造断点续传能力,文件读取模块、代理层和上游响应都必须允许范围请求。
open_✨file_cache max=1000 inactive=60s;
add_header Cache-Control "public, max-age=86400";
视频缓存头应根据文件是否会变化来设置。带有唯一版本名的文件可以使用较长 max-age;同一路径会被替换的视频不应盲目设置长期缓存,否则用户可能继续播放旧内容。出现 416 状态时,应检查客户端请求范围是否超出当前文件大小,也要确认文件是否在生成或替换过程中发生了尺寸变化。