1. 程式人生 > >nginx-rtmp加入權限驗證的簡單方法

nginx-rtmp加入權限驗證的簡單方法

mar 權限 out admin web query 修改 傳輸 term

nginx-rtmp-module默認不限制推流權限、播放權限。如果想加入權限驗證,有很多種方法。

方法一:修改源碼,如:

如何給 nginx rtmp 服務加入鑒權機制

http://blog.csdn.net/cui918/article/details/53540397

方法二:修改nginx配置,如:

nginx-rtmp-module 權限控制

http://blog.csdn.net/iam_shuaidaile/article/details/50599943

崇尚簡單的話,直接修改配置就好。

其實還可以更簡潔,僅修改nginx配置文件,不用跳轉到第三方web服務。

主要是利用on_publish跳轉到當前配置的一個“location”,在這裏進行驗證。關鍵點在於rtmp application節點下面要配置“notify_method get;”為什麽呢?因為跳轉的時候,默認以POST方式傳輸參數,修改成GET方式,nginx配置裏就可以輕松處理了。(當然nginx通過配置文件也可以處理post,只是復雜一些)。

本次測試使用的是win32版 nginx-rtmp,下載地址為:

https://codeload.github.com/illuspas/nginx-rtmp-win32/zip/master

下載後解壓,修改配置文件nginx.conf(可直接復制使用,刪除了一些與本次測試無關的配置項,熟悉nginx配置的朋友也可在自己的配置文件中靈活修改)

****************************** nginx.conf******************************

worker_processes 1;

error_log logs/error.log debug;

events {

worker_connections 1024;

}

rtmp {

server {

listen 8035;

application live {

live on;

notify_methodget;

on_publishhttp://127.0.0.1:8033/on_publish;

}

}

}

http {

server {

listen 8033;

location/on_publish{

default_typetext/html;

set$pass 0;

if($query_string ~* "pass=(.+)$") {

set$pass $1;

}

if($pass = 89437589) {

return200 pass.......$pass;

}

if($pass != 89437589) {

return404;

}

}

}

}

******************************ffmpeg推流一:不加驗證,失敗******************************

ffmpeg -i "rtsp://admin: [email protected]/h264/ch1/sub/av_stream"-c:v copy -c:a copy -f flv "rtmp://127.0.0.1:8035/live/t1"

技術分享圖片

******************************ffmpeg推流二:加驗證,成功******************************

ffmpeg -i "rtsp://admin: [email protected]/h264/ch1/sub/av_stream"-c:v copy -c:a copy -f flv"rtmp://127.0.0.1:8035/live/t1?user=abc&pass=89437589"

技術分享圖片

******************************小結******************************

如果要控制播放權限,則用on_play跳轉,方法類似。

nginx-rtmp加入權限驗證的簡單方法