Nginx 编译安装第三方流媒体缓存模块需源码编译:先装依赖、清理系统Nginx,再下载Nginx与模块源码,用--add-module配置编译参数,make install后配置rtmp/http块启用HLS/FLV缓存。

在 Nginx 中编译安装第三方流媒体缓存模块(如 nginx-rtmp-module、nginx-http-flv-module 或支持 HLS/DASH 缓存的定制模块),不能通过 `apt`/`yum` 直接安装,必须从源码编译。核心是:**先获取 Nginx 源码,再合并第三方模块源码,最后配置并编译安装**。
确认系统依赖和基础工具
确保已安装编译所需的基础环境:
- gcc、g++、make、perl、libpcre3-dev(或 pcre-devel)、zlib1g-dev(或 zlib-devel)、libssl-dev(或 openssl-devel)
- 若需 HTTP FLV 或 RTMP 推拉流,建议同时安装 libavformat、libavcodec 等(部分模块会检测 FFmpeg 头文件)
- 检查是否已存在系统自带 Nginx(如已安装,建议 `apt remove nginx*` 或 `yum remove nginx*` 并清理 `/etc/nginx` 配置目录,避免冲突)
下载 Nginx 源码与目标模块源码
推荐使用稳定版 Nginx(如 1.24.x),模块需与 Nginx 版本兼容(尤其注意 1.25+ 对部分老模块支持变弱):
- 从 nginx.org 下载源码包,例如:
wget https://www.php.cn/link/9926b3ed9e0bc20b2ed7f32711b8b45fnginx-1.24.0.tar.gz - 下载第三方模块(以常用流媒体模块为例):
-
RTMP 支持:
git clone https://github.com/arut/nginx-rtmp-module.git -
HTTP-FLV / HLS 增强缓存:
git clone https://github.com/winshining/nginx-http-flv-module.git - 若需更细粒度缓存控制(如按 stream key 分片缓存 TS 文件),可选用社区维护的 fork 版本,或自行 patch 缓存逻辑
-
RTMP 支持:
配置编译参数并编译安装
解压 Nginx 源码后,进入目录,用 ./configure 显式启用模块(不带 --add-module 则不会编译进二进制):
./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_mp4_module \ --add-module=../nginx-rtmp-module \ --add-module=../nginx-http-flv-module \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log
关键点:
-
--add-module路径必须是绝对路径或相对于当前 configure 所在目录的相对路径 - 不要遗漏
--with-http_ssl_module(HTTPS 推流/播放必需) - 若需 proxy 缓存能力(如反向代理 HLS 源站并本地缓存 .m3u8/.ts),保留
--with-http_proxy_module和--with-http_cache相关选项(Nginx 默认已含) - 运行
make && sudo make install完成安装
验证模块加载与基础流媒体缓存配置
安装完成后检查模块是否生效:
/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o "nginx-rtmp\|http-flv"
然后编辑 /usr/local/nginx/conf/nginx.conf,添加流媒体服务块(示例为 RTMP + HTTP-FLV 缓存):
rtmp {
server {
listen 1935;
chunk_size 4096;
<pre class="brush:php;toolbar:false;"> application live {
live on;
record off;
# 启用 HLS 切片(生成 .m3u8 和 .ts,即缓存行为)
hls on;
hls_path /var/tmp/nginx/hls;
hls_fragment 3s;
hls_cleanup on;
# 可选:将推流自动转为 HTTP-FLV 输出(供低延迟播放)
http_flv on;
}
}}
http { include mime.types; default_type application/octet-stream;
server {
listen 80;
location /live {
flv_live on;
add_header 'Access-Control-Allow-Origin' '*';
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /var/tmp/nginx;
add_header 'Cache-Control' 'no-cache';
}
}}
注意:
- HLS 的
hls_path目录需提前创建并赋权(sudo mkdir -p /var/tmp/nginx/hls && sudo chown www-data:www-data /var/tmp/nginx/hls) - 若要实现“主动缓存”(如预加载热门流的切片),需配合 Lua 模块(如
lua-nginx-module)或外部脚本调度,原生 RTMP/HLS 模块只做被动录制式缓存 - HTTP 缓存(proxy_cache)可用于代理外部流源,需在
http{}块中定义proxy_cache_path并在location中启用
不复杂但容易忽略:模块版本兼容性、configure 路径写错、权限未设导致写入失败、以及忘记开放防火墙端口(1935、80、443)。编译成功后,用 ffmpeg 推流测试,再用 VLC 或 flv.js 播放验证即可。


















