nginx-rtmp加入權限驗證的簡單方法
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加入權限驗證的簡單方法