Jan 1 1970

nginx防盗链配置

Published by Jone at 2008-6-8 11:00 under 编辑

方法1:直接配置nginx.conf
location /img/ {
     root /data/;
     valid_referers none blocked server_names *.sohu.com sohu.com ;
     if ($invalid_referer) {
                    rewrite  ^/  http://www.sohu.com/images/error.gif
                    #return   403;
     }
}
方法2:利用 nginx 的第三方模块 ngx_http_accesskey_module 来实现下载文件的防盗链

description:
比如我的 download 目录下有一个 file.zip 的文件。对应的URI 是http://example.com/download/file.zip
使用ngx_http_accesskey_module  模块后http://example.com/download/file.zip?key=09093abeac094. 只有给定的key值正确了,才能够下载 download 目录下的 file.zip
而且 key 值是根据用户的 Ip 有关的,这样就可以避免被盗链了。
安装模块方法
解压,然后在编译nginx的时候加上:
    ./configure --addon-module=path/to/nginx-accesskey
 
 
 
配置方法
 
需要在nginx的配置文件里面添加
    location /download {
        accesskey             on;
        accesskey_hashmethod md5;
        accesskey_arg         "key";
        accesskey_signature   "mypass$remote_addr";
    }
 
 
 
语法:
accesskey [on|off]
默认是off。
用 on 开启这个功能。
 
accesskey_arg "string"
默认是 key,就是用于http://example.com/download/file.zip?key=09093abeac094 里面的 key。
如果使用 accesskey_arg "string"
 
accesskey_hashmethod [md5|sha1]
默认是 md5.
这里是选择哈希的类型。随便用哪个都可以。不过在生成下载 uri 的时候需要使用相应的哈希方法。
 
accesskey_signature "string"
默认是accesskey_signature "$remote_addr"
这里是被签名(哈希)的字符串。
$remote_addr 表示用户的 ip
为了很好的防盗链,这里应该给用户ip加上噪声。让别人无法猜到。
比如accesskey_signature " myPassWord $remote_addr"
 
 
 
 
 
生成下载URI 的方法。
假设    
location /download {
        accesskey             on;
        accesskey_hashmethod md5;
        accesskey_arg         "key";
        accesskey_signature   "mypass$remote_addr";
    }
Php:
http://example.com/download/file.zip?key=<?php echo md5(“mypass “.$_SERVER['REMOTE_ADDR']); ?>
 
 
 
 
参考文献: http://wiki.codemongers.com/NginxHttpAccessKeyModule

« nginx的下载连接限制 | 国外站长论坛(全英文)»

引用地址:

评论

已有如下评论:

  • jay 说:
    郁闷,我的一切都弄好后,访问下载是403错误,请问是什么原因?
  • 天行 说:
    我想知道第一种方式你有试过么?我们这里好像不好用,几个人都试过。
    谢谢!
  • alexlzl 说:
    1. modify the file "config" under nginx-accesskey-2.0.3

    -HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESSKEY_MODULE"
    +HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"

    2. when configure use absolute path, for example:
    $ ./configure --with-http_ssl_module --add-module=src/addons/nginx-accesskey-2.0.3
  • bsd 说:
    freebsd下已用ports安装nginx后,怎么加入Accesskey模块呢?
  • uingei 说:
    nginx Access Key Module patch
    http://blog.chinaunix.net/u2/69948/showart_1163321.html
  • jason 说:
    unknown directive "Accesskey" ,这个模块怎么搞定的啊..我按官方文档安装配置,启动不了啊.
  • Jone 说:
    很抱歉,一直没看到,希望已经配置好了。
    NGINX不难配的,关键是多找找资料,四个字“胆大心细”就OK了
  • 这个有点急望前辈能早点回复下 谢谢了!
  • 前辈,我在编译NGINX的时候想把ACCESSKEY加进去,我试着照着官方那种做法把编译后,但仍然不正确,提示说 ACCESSKEY 错误! 要怎么做才能正确运行呢!
       忘前辈指点!

发表评论: