Nginx防盗链模块HttpAccessKeyModule配置与研究

post by rocdk890 / 2011-11-11 13:15 Friday linux技术

  看过群里的下载站就想自己也来研究下,没想到自己整起来这么的曲折,让我没有想到的是原来nginx维基上也会有不全的地方,配置这个模块是很简单,要真的使用还这么的麻烦.好了废话不多看教程吧.
   系统:centos 5.6
   需要的软件:nginx-1.0.9.tar.gz Nginx-accesskey-2.0.3.tar.gz

1.确认安装了gcc和make,如果没有就运行下面的命令
yum -y install gcc* make
2.解压nginx和nginx-accesskey,并编译nginx
tar zxf Nginx-accesskey-2.0.3.tar.gz && cd nginx-accesskey
修改conf文件里内容,如下图:
 点击查看原图
也就是把这行HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESSKEY_MODULE"替换为HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"
点击查看原图
tar zxf nginx-1.0.9.tar.gz && cd nginx-1.0.9
编译如下:
./configure --user=nginx --group=nginx --add-module=../nginx-accesskey-2.0.3  --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-http_geoip_module --with-mail --with-mail_ssl_module --with-cc-opt='-O3' --with-cpu-opt=opteron
具体参数解释可以看我的用tcmalloc优化nginx 这篇文章 .
然后执行:
make &&make install
service nginx restart
3.修改nginx配置文件
vi /etc/nginx/nginx.conf
nginx文件里内容:
点击查看原图
/download替换为你想要防盗链的目录.
重启nginx后,访问https://blog.slogra.com/download会出现403错误提示.所以我们要用php来配合下载.
代码如下:
<!--? $ipkey=md5("mypass".$_SERVER['REMOTE_ADDR']); $output_add_key="<a href=https://blog.slogra.com/download/xxx.rar?key=" .$ipkey."-->download_add_key";
$output_org_url="<a href="https://blog.slogra.com/download/xxx.rar">download_org_path</a>";
echo $output_add_key;
echo $output_org_url;

?>

当然我是根据朋友兔子的php代码来做的下载,这个代码我放在附件里提供给大家下载.
4.nginx-accesskeyp使用cookie做key
 一般我们使用防盗链都是使用这样的配置:
location /download {
  accesskey             on;
  accesskey_hashmethod  md5;
  accesskey_arg         "key";
  accesskey_signature   "mypass$remote_addr";
}
 对大部分的网站来说,一般程序和下载文件不会是在同一台服务器的,所以对于多出口的网络(如移动,铁通,或一个公司有多个出口做负载均衡的情况下),就可能出现key对不上而发生403的问题,对于这个问题,只能选择换key了,不用$remote_addr那用什么呢?Cookie是个好尝试,于是上面的配置可以改成:

if ( $http_cookie ~* " ng_cookie=(.+?)(?:;|$)")
{
    set $ng_cookie $1;
}

location /download {
  accesskey             on;
  accesskey_hashmethod  md5;
  accesskey_arg         "key";
  accesskey_signature   "mypass$ng_cookie";
}
测试过ie,firefox,获取cookie都OK,只要不清cookie,不跨域,对于同一个浏览器来说url都不会失效.
5.nginx-accesskey和proxy store结合试用
第三方模块跟nginx自带的模块总会发生一些冲突而导致某些功能失灵,当access key和proxy store同时使用的时候就会发生冲突而导致加密失败,但nginx总能用一些nginx特殊的方式去解决这个问题,比如可以通过404去请求proxy store,配置如下:

        proxy_buffering on;
        location / {
                root /home;
                accesskey             on;
                accesskey_hashmethod   md5;
                accesskey_arg         "key";
                accesskey_signature   "mypasswd$remote_addr";
                error_page 404 =200 /fetch$request_uri;
        }
        location /fetch/ {
                alias /home;
                proxy_store on;
                proxy_set_header Accept-Encoding '';
                proxy_set_header Host $host;
                proxy_pass http://10.0.0.2;
        }

用户请求到/,先通过access key判断是否有效,无效直接403,有效继续往下走,假如碰到404,就跳到/fetch/,从后端的服务器把文件抓过来.
好了,大家可以根据上面的一些配置来自己进行研究.

夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-65.html

附件下载:
index.rar 5.13KB

标签: nginx 配置 安装 HttpAccessKeyModule 防盗链 模块 防盗链模块

  1. 2013-01-05 09:20
    @MaxGO:我不是放了个附件嘛? 你可以参考下
  1. gravatar MaxGO
    2013-01-04 14:01
    使用cookie,php端怎么写?

评论: