本文章主要是介绍nginx的conf文件配置来达到加密防盗链
要进行文件配置和MD5加密,需要先安装插件,插件的安装请参考nginx配置视频流加密防盗链(一)安装nginx插件_秋之失忆的博客-CSDN博客
配置nginx的conf文件拦截加密
1、进入到conf目录,目录如下
[root@localhost conf]# pwd
/usr/local/nginx/conf
2、修改配置文件
[root@localhost conf]# vim nginx.conf
3、添加代码,这里是对9999端口进行监听,然后转发给8888
server {
listen 9999;
server_name localhost;
if ($time_iso8601 ~ "(\d{4}-\d{2}-\d{2})") {
set $tttt $1;
}
location ~* /sample/.*\.m3u8$ {
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8888;
proxy_connect_timeout 6500;
proxy_read_timeout 400;
proxy_send_timeout 400;
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "pwd$remote_addr$tttt";
}
location ~* /sample/.*\.ts$ {
proxy_pass http://127.0.0.1:8888;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4、重新加载配置文件
[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload
5、测试
我服务器的视频流测试地址:http://192.168.3.212:8888/sample/02/stream.m3u8
因为监听端口是9999,所以修改地址后为:http://192.168.3.212:9999/sample/02/stream.m3u8
由于地址9999端口是被监听,所以会被拦截,去判断key参数,上面请求无参数,所以无法正常播放。
key参数由字符串“pwd”+访问电脑的ip地址+服务器时间年-月-日 组合而成,再经过md5加密。
例如访问电脑为192.168.3.111,服务器时间为2022-09-09,那么最终组合的字符串为:pwd192.168.3.1112022-09-09,经过md5加密后,为:71aeb0f6cc85c6248cbaf6cf36e91236
所以,最终的地址为:http://192.168.3.212:9999/sample/02/stream.m3u8?key=71aeb0f6cc85c6248cbaf6cf36e91236
总结:
防盗链的原理是通过监听服务端口在转发请求的时候添加参数,然后对参数进行一个简单的判断。
但是如果参数的明文那么意义不大,所以要对参数进行MD5加密,通过nginx的插件进行比对,参数一致则正常转发,否则就返回错误。
MD5的参数设置可以自行发挥