windows下nginx的rtmp配置加载问题 unknown directive "rtmp"

本文介绍了解决Windows环境下nginx无法使用rtmp模块的问题,提供了两种解决方案:一是重新编译nginx源码加入rtmp模块;二是直接下载已包含rtmp模块的nginx版本。

网络上大多都是说由于用记事本打开nginx.conf编辑,导致conf文件被添加了utf8-bom信息。

由于本人用的是notepad++打开,并查看配置文件并无出现此错误,经过搭梯子找到相关的信息。

nginx的windows版本可能在编译的时候没有对rtmp模块进行编译导致使用不了。

方法1:

下载源码重新进行编译并把rtmp模块进行编译进去。

方法2:

下载带rtmp模块的nginx版本,如nginx 1.7.11.3 Gryphon,亲测可用

上述情况为windows版本

在 Docker 中使用 Nginx 并集成 RTMP 模块时,如果遇到 `nginx: [emerg] unknown directive "rtmp"` 的错误提示,说明 Nginx 未正确识别 `rtmp` 配置指令。这种情况通常是因为 Nginx 编译时未包含 RTMP 模块,或者配置文件的结构不正确。 ### 原因分析 1. **缺少 RTMP 模块支持** Nginx 默认并不包含 RTMP 模块(即 `nginx-rtmp-module`),该模块需要在编译 Nginx 时手动添加。如果当前使用的 Nginx 镜像没有通过 `--add-module` 参数将 RTMP 模块引入,则无法识别 `rtmp` 指令[^1]。 2. **RTMP 配置位置错误** `rtmp` 块应放置在 Nginx 配置文件的最外层,不能嵌套在 `http` 或其他上下文中。若将其写入了 `http` 块内部或被其他标签包裹,则会触发配置解析错误[^2]。 --- ### 解决方法 #### 方法一:构建自定义 Nginx 镜像并添加 RTMP 模块 以下是一个基于 Ubuntu 构建支持 RTMPNginx Docker 镜像的步骤: ```Dockerfile FROM ubuntu:latest RUN apt update && \ apt install -y build-essential libpcre3 libpcre3-dev libssl-dev git wget WORKDIR /usr/local/src RUN wget https://nginx.org/download/nginx-1.24.0.tar.gz && \ tar -zxvf nginx-1.24.0.tar.gz RUN git clone https://github.com/arut/nginx-rtmp-module.git WORKDIR /usr/local/src/nginx-1.24.0 RUN ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module && \ make && \ make install COPY nginx.conf /usr/local/nginx/conf/nginx.conf EXPOSE 1935 EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"] ``` 其中,`nginx.conf` 文件应确保 `rtmp` 块位于顶层,例如: ```nginx rtmp { server { listen 1935; chunk_size 4096; application live { live on; } } } http { include mime.types; default_type application/octet-stream; server { listen 80; location / { root html; index index.html; } } } ``` #### 方法二:检查并修正现有配置文件 如果已确认镜像中包含 RTMP 模块,则需检查 `nginx.conf` 文件中的 `rtmp` 块是否被正确放置。确保其不在 `http` 块或其他上下文中,并且语法无误。 --- ### 方法三:使用已支持 RTMP 的第三方镜像 可以采用社区维护的支持 RTMPNginx Docker 镜像,如 `tiangolo/nginx-rtmp`,直接运行即可省去编译过程: ```bash docker run -d -p 1935:1935 -p 80:80 tiangolo/nginx-rtmp ``` --- ### 方法四:验证 Nginx 是否包含 RTMP 模块 进入容器后执行以下命令查看模块信息: ```bash /usr/local/nginx/sbin/nginx -V 2>&1 | grep -- '--add-module' ``` 若输出中包含 `--add-module=../nginx-rtmp-module`,则表示已成功加载 RTMP 模块。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值