利用 nginx 的第三方模块 ngx_http_accesskey_module 来实现下载文件的防盗链。
2008-02-20  作者:amao  同分类文章
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


相关
泛解析的路径重写rewrite path
nginx + php 实现高负载于apache
nginx 可以干什么。
通过网络(ntp)来更新系统时间
通过外部shell程序重写泛解析域名
升级到APC-3.0.17.tgz 把我的服务器环境搞坏了。
找出暴力破解centos密码的坏蛋ip。
cgiproxy又开始更新了。
加速php 的eAccelerator的web管理界面
putty lynx 浏览utf-8 乱码