客户需求如下:
在web请求视频时,按算法生成密文和明文串,然后依规则组成最终的url请求;
算法规则——用如下三个关键词生成MD5密文:
1、自定义密钥:abcde.;
2、视频文件真实路径,即/path/to/file.rmvb;
3、请求时间,以当前UNIX时间换算为十六进制字符串,并作为明文;
最终url格式是http://www.test.com/path/to/file.rmvb?key=1234567890abcdefghijklmnopqrstuy&t=1234abcd这样。
要求失效时间为8小时。
这个需求和之前一次相当类似,不过上回是squid,这次是apache。同样采用perl脚本进行防盗链设置,apache需要使用mod_perl模块。
首先安装perl模块:
wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
tar zxvf mod_perl-2.0-current.tar.gz
cd mod_perl-2.0-current.tar.gz
perl Makefile.PL MP_APXS=/home/apache2/bin/apxs
make && make install
echo "LoadModule perl_module modules/mod_perl.so" >> /home/apache2/conf/httpd.conf
perl -MCPAN -e shell
>install Apache2::Request
>look Apache2::Request
rm -f configure
rm -f apreq2-config
./buildconf
perl Makefile.PL
make && make install
exit
(因为64位系统的libexpat.so有问题,编译libapreq2会出问题,只好如此强制安装)
echo "LoadModule apreq_module modules/mod_apreq2.so" >> /home/apache2/conf/httpd.conf
因为libapreq2.so安装在/home/apache2/lib/下了,所以需要echo "/home/apache2/lib">/etc/lo.so.conf.d/apache.conf,然后ldconfig。
修改httpd.conf,加入如下设置:
PerlPostConfigRequire /home/apache2/perl/start.pl
<Location /smg>
SetHandler modperl
PerlAccessHandler DLAuth
PerlSetVar ShareKey abcde.
</Location>
然后mkdir /home/apache2/perl/,在其中创建start.pl和DLAuth.pm两个文件。start.pl文件内容如下:
use strict;
use lib qw(/home/apache2/perl);
use Apache2::RequestIO ();
use Apache2::RequestRec ();
use Apache2::Connection ();
use Apache2::RequestUtil ();
use Apache2::ServerUtil ();
use Apache2::Log ();
use Apache2::Request ();
1;
DLAuth.pm文件内容如下:
package DLAuth;
use strict;
use warnings;
use Socket qw(inet_aton);
use POSIX qw(difftime strftime);
use Digest::MD5 qw(md5_hex);
use Apache2::RequestIO ();
use Apache2::RequestRec ();
use Apache2::Connection ();
use Apache2::RequestUtil ();
use Apache2::ServerUtil ();
use Apache2::Log ();
use Apache2::Request ();
use Apache2::Const -compile => qw(OK FORBIDDEN);
sub handler {
    my $r = shift;
    my $s = Apache2::ServerUtil->server;
    my $shareKey = $r->dir_config('ShareKey') || '';
    my $uri = $r->uri() || '';
    my $args = $r->args() || '';
    my $expire = 8 * 3600;
    if ($args =~ m#^key=(\w{32})\&t=(\w{8})$#i){
    my ($key, $date) = ($1, $2);
    my $str = md5_hex($shareKey . $uri . $date)
    my $reqtime = hex($date);
    my $now = time;
    if ( $now - $reqtime < $expire){
        if ($str eq $key) {
            return Apache2::Const::OK;
        } else {
                $s->log_error("[$uri FORBIDDEN] Auth failed");
            return Apache2::Const::FORBIDDEN;
        }
    }
    }
    $s->log_error("[$uri FORBIDDEN] Auth failed");
    return Apache2::Const::FORBIDDEN;
}
1;
就可以了。
apachectl restart。测试一下,先用perl自己生成一个测试链接:
#!/usr/bin/perl -w
use Digest::MD5 qw(md5_hex);
my $key = "bestv.";
$path = shift(@ARGV);
my $date = sprintf("%x",time);
$result = md5_hex($key . $path . $date);
my $uri = "http://127.0.0.1$path\?key=$result\&t=$date";
print $uri;
运行./url.pl /smg/abc.rmvb生成http://127.0.0.1/smg/abc.rmvb?key=4fb6b4e6a0ec484aea98fa727fc7149d&t=4bc7dd5a,然后wget -S -O /dev/null "http://127.0.0.1/smg/abc.rmvb?key=4fb6b4e6a0ec484aea98fa727fc7149d&t=4bc7dd5a",返回200 OK;任意修改t为12345678,再wget,返回403 Forbidden。error_log显示如下:
[Fri Apr 16 11:47:06 2010] [error] [/smg/abc.rmvbkey=4fb6b4e6a0ec484aea98fa727fc7149d&t=12345678 FORBIDDEN] Auth failed

Anychat专业即时通讯方案,专注六年的研发。能够给你提供最高清实时的音视频即时通讯。
如有需要下载体验可以访问http://www.bairuitech.com/

详细了解可以致电020-38109065/ 020-38103410或者加Q1816573263。

转载于:https://blog.51cto.com/6278039/1103014

【Anychat音视频开发】apache防盗链之mod_perl相关推荐

  1. 【Anychat音视频开发】视频直播系统的开发技术点

    视频直播是利用视频压缩.直播等流媒体技术,在装有电视卡或视频采集卡的电脑上安装一套视频直播服务软件,把采集到的视频信号进行一系列实时编码.处理,然后再广播出去,起到同步直播的效果.视频直播被广泛的应用 ...

  2. 【Anychat音视频开发】相对路径与绝对路径详解

    表示文件路径的方式有两种,相对路径和绝对路径.在网页设计中通过路径可以表示链接,插入图像.Flash.CSS文件的位置. 相对路径:以当前文件所在位置为参考点,而建立出的目录路径. 绝对路径:以Web ...

  3. AnyChat音视频互动开发平台(SDK)

    AnyChat音视频互动开发平台(SDK)采用了先进的DirectShow架构体系.DirectShow是一个开放性的应用框架,是一种适合于流媒体处理的架构.AnyChat音视频互动开发平台构建于Di ...

  4. im和音视频开发哪个更好_如何阅读成为更好的开发者的方式

    im和音视频开发哪个更好 by nolan grace 通过诺兰·格雷斯 如何阅读成为更好的开发者的方式 (How to read your way to becoming a better deve ...

  5. 【安卓】音视频开发入门

    文章目录 音视频开发学习思路 关于开发的思考 音视频开发的内容 采集 渲染 处理 传输 音频基础知识 基础概念 采样率(samplerate) 量化精度(位宽) 声道数(channels) 音频帧(f ...

  6. Android IOS WebRTC 音视频开发总结(六五)-- 给韩国电信巨头做咨询

    Android IOS WebRTC 音视频开发总结(六五)-- 给韩国电信巨头做咨询 本文主要总结咨询过程中的一些问题,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackert ...

  7. im和音视频开发哪个更好_找时间成为更好的开发人员

    im和音视频开发哪个更好 There's no time for anything. At least that's how it feels doesn't it? No time to learn ...

  8. Android IOS WebRTC 音视频开发总结(三八)-- tx help

    Android IOS WebRTC 音视频开发总结(三八)-- tx help 本文主要介绍帮一个程序员解决webrtc疑问的过程,文章来自博客园RTC.Blacker,支持原创,转载请说明出处(w ...

  9. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

最新文章

  1. 软件配置管理(Software Configuration Management,SCM)
  2. arcgis python编程案例-面向ArcGIS的Python脚本编程
  3. html标签思维导图
  4. 在java中如何实现声音,我如何在Java中播放声音?
  5. 万字干货 | 滴滴顺风车事业部总经理:忘掉产品,专注用户(附下载)
  6. css不换行属性_前端 | css display:flex 的六个属性你知道吗
  7. 苏州大学文正学院计算机专业,苏州大学文正学院有哪些专业及什么专业好
  8. SPSS统计检验中的边缘显著及其转化处理【SPSS 063期】
  9. Linux vip地址通信原理,IPv6的组播地址(掌握IPv6通信原理的关键知识点)
  10. 网络经商赚钱经典50问
  11. php5.3.3 xhprof,给CentOS6.3 + PHP5.3 安装PHP性能测试工具 XHProf-0.9.2
  12. 自适应滤波器(二)NLMS自适应滤波器
  13. 开箱-艳云脚本云控系统
  14. 从源码分析Android的Glide库的图片加载流程及特点
  15. 基于java汽车4S服务管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  16. ML和PR相关书籍及下载
  17. 如何写好测试用例的标题
  18. 幻14 ubuntu20.04 AX210驱动安装
  19. Codeforces Round #693 (Div. 3)部分题解
  20. Fitbit融资7.3亿美元上市了 成可穿戴设备第一股

热门文章

  1. Android消息处理机制
  2. 用外观判断论文好坏?这位顶会领域主席的论文被自己的AI审稿系统拒绝了
  3. MySQL中优化sql语句查询常用的30种方法
  4. iOS开发-动画总结
  5. 检查多边形是否包含了某点(经纬度)
  6. Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
  7. 自动填充控件AutoCompleteExtender控件实现代码
  8. 解决AJAX CalendarExtender控件不显示中文的情况(转帖博客园某人(不好意思,实在是没有找到您的尊姓大名,感谢一下!))...
  9. 预测人民币在2006年最终的收盘价
  10. java 按键框架,如何在java中更改框架?