在VPS上搭建Nginx RTMP流媒体服务器

如果想要实现自主直播而无需依赖YouTube或Twitch等平台,Nginx RTMP(实时消息传输协议模块)提供了强大而轻量的解决方案。使用Nginx RTMP,你可以直接从自己的VPS进行低延迟直播——从采集到观众只需1-3秒的延迟。无论是游戏直播、线上会议、教育讲座还是内容创作,Nginx RTMP都让你的所有数据保存在自己的服务器上,同时完全掌控内容和受众。

理解RTMP协议与Nginx的优势

RTMP(Real-Time Messaging Protocol,实时消息传输协议)是为互联网上的直播音视频传输而特别设计的协议。与引入显著延迟的HTTP直播解决方案(10-60秒)不同,RTMP通过保持持久连接来实现真正的实时流传输。以下是使RTMP成为直播杰出选择的关键优势:

Nginx以速度和效率而闻名,是添加RTMP功能的完美基础。与其部署专业的流媒体服务器,不如用RTMP模块编译Nginx,将你现有的Web服务器转变为功能强大的直播平台,同时保持最小的CPU和内存占用。

前置条件与系统要求

开始之前,请确保你的VPS满足以下最低要求:

AsiaGB在泰国和新加坡提供的VPS专门针对直播工作负载优化,配备SSD存储、99%正常运行时间保证和充足带宽分配,价格从每月500泰铢起。

第一步:更新系统并安装构建依赖

首先更新系统包管理器并安装编译Nginx RTMP支持所需的基本开发工具:

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev \
  libgd-dev libgeoip-dev git curl wget

这些包包括GCC编译器、Make构建系统以及Nginx编译时需要的各种库文件。该过程通常需要5-10分钟,具体取决于你的VPS下载速度和现有缓存包。

第二步:下载Nginx源代码与RTMP模块

进入临时工作目录并从官方仓库下载Nginx源代码和RTMP模块:

cd /tmp
wget http://nginx.org/download/nginx-1.24.0.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
tar -zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0

继续前务必验证nginx-1.24.0确实是最新稳定版本。访问nginx.org确保你未使用过时软件。使用最新版本可确保受益于最新安全补丁和性能优化。

第三步:配置并编译包含RTMP模块的Nginx

运行configure脚本并使用适当的标志来包含RTMP模块和其他基本特性:

./configure \
  --prefix=/etc/nginx \
  --sbin-path=/usr/sbin/nginx \
  --modules-path=/usr/lib64/nginx/modules \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/run/nginx.lock \
  --with-http_gzip_static_module \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_geoip_module \
  --add-module=../nginx-rtmp-module

此配置启用关键模块:用于HTTPS支持的SSL/TLS、用于带宽效率的gzip压缩、用于更快页面加载的HTTP/2,以及最重要的RTMP模块。配置成功完成后,编译并安装:

make && sudo make install

编译过程可能需要10-20分钟,具体取决于CPU速度。2核VPS通常在15分钟内完成。你会看到编译进度消息;请等待流程完全完成后再继续。

第四步:为RTMP直播配置Nginx

编辑Nginx主配置文件以添加RTMP应用定义:

sudo nano /etc/nginx/nginx.conf

滚动到文件末尾(最后一个右括号前)并添加RTMP服务器块:

rtmp {
    server {
        listen 1935;

        application live {
            live on;
            record off;

            # 流权限限制——根据安全需要修改
            allow publish all;
            allow play all;
        }

        application vod {
            play /mnt/vod/videos;
        }
    }
}

此配置创建两个RTMP应用:'live'用于实时广播,'vod'用于提供存档的点播内容。'record off'设置意味着流不会自动保存(我们之后单独处理录制)。要限制推流到特定IP,请将'allow publish all'替换为具体IP范围。

第五步:为VOD录制准备视频存储目录

为录制的视频创建专用目录:

sudo mkdir -p /mnt/vod/videos
sudo chown -R www-data:www-data /mnt/vod
sudo chmod 755 /mnt/vod/videos

这些目录将存储从直播流捕获的FLV文件,允许你维护所有广播的完整归档。www-data用户和组确保Nginx进程的文件所有权正确。如果需要,你可以将该目录符号链接到更大的挂载点或单独的存储。

第六步:启动Nginx并验证RTMP端口

测试Nginx配置语法,然后启动服务并启用开机自启:

sudo nginx -t    # 语法验证——应显示"test is successful"
sudo systemctl start nginx
sudo systemctl enable nginx

验证RTMP服务器正在监听端口1935:

sudo netstat -tlnp | grep 1935
# 或者:
ss -tlnp | grep 1935

应该看到输出显示Nginx正在监听(LISTEN状态)1935端口。如果端口不出现,运行'sudo tail -f /var/log/nginx/error.log'检查Nginx错误日志诊断问题。

⚠️ 防火墙配置:你的VPS防火墙必须允许1935端口流量。如果使用ufw(简易防火墙),运行:sudo ufw allow 1935/tcp。对于云提供商防火墙(AWS、DigitalOcean等),添加1935 TCP端口的入站规则。

第七步:连接OBS Studio并开始直播

在你的直播电脑上打开OBS Studio并导航到设置 → 直播。配置这些值:

点击"开始直播",OBS将连接到你的Nginx服务器。几秒内,你的视频流开始流向VPS。观众的播放URL为:rtmp://your-vps-ip:1935/live/mystream123

高并发直播的性能调优

对于超过500并发观众的直播,优化Nginx配置:

worker_processes auto;
worker_connections 10000;
events {
    use epoll;
}
http {
    client_max_body_size 100m;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
}

并增强RTMP服务器设置:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        idle_streams off;

        application live {
            live on;
            record off;
        }
    }
}

这些设置增加工作进程数量、提升连接限制,优化TCP行为以实现流媒体工作负载。'epoll'事件引擎在高并发Linux系统上提供卓越性能。

实施安全性:限制流发布者

为防止未授权用户广播,实现基于webhook的认证。在RTMP应用块中添加:

application live {
    live on;
    on_publish http://localhost:8080/auth;
}

然后在localhost:8080/auth创建PHP脚本针对数据库验证推流密钥。这确保只有授权用户可以广播,同时允许匿名观众收看。

监控与维护

定期监控Nginx性能和日志:

# 实时监控错误日志
sudo tail -f /var/log/nginx/error.log

# 监控访问(连接)日志
sudo tail -f /var/log/nginx/access.log

# 直播期间监控CPU和内存使用率
top

定期用安全补丁更新Nginx。定期检查新版本并使用相同configure标志重新编译。记录你的编译步骤便于未来更新。

准备好启动你的直播服务器了吗?

AsiaGB VPS为自托管直播提供理想平台。泰国和新加坡位置为亚洲观众提供最优延迟。SSD存储确保快速VOD录制,99%正常运行时间保证保护你的直播计划,无限制带宽消除扩展顾虑。从每月500泰铢起开始直播。

开始使用AsiaGB VPS

查看泰国VPS主机全部套餐 →