一:一般的防盗链如下:
代码如下 | 复制代码 |
location ~* .(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.111cn.net ; if ($invalid_referer) { rewrite ^/ http://www.111cn.net; #return 404; } } |
第一行:gif|jpg|png|swf|flv
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对www.ingnix.com这2个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.111cn.net页面,当然直接返回404也是可以的。
Nginx的防盗链还是比较好做的,备份一下吧。主要针对图片防盗链,因为我一般不在服务器上直接提供文件下载。
1、如果对全站图片做防盗链,至少需要一个另外的域名存放指向图片。因为如果对全站图片做了防盗链,包括盗链提示图片在内的所有图片都不可能显示。
此类情况修改 /usr/local/nginx/conf/nginx.conf 文件
2、对单独域名配置图片防盗链,个人比较推荐,一是便于控制,二是可以重新创建一个域名在同服务器上用来存放盗链提示图片。
此类情况修改 /usr/local/nginx/conf/vhost/你自己域名.conf 文件
3、你需要准备一张盗链提示图片,放在其它的服务器或者其它域名下,例如下面这个。我自己做的哈哈哈,双语显示是不是很装逼
4、在配置文件里找到类似下面location...jpg...这样的代码,然后照着改吧,我慢慢解释
代码如下 | 复制代码 |
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; access_log off; valid_referers none blocked *.slyar.com *.jetfond.com *.youdao.com *.zhuaxia.com *.xianguo.com *.google.cn *.google.com *.google.com.tw *.google.com.sg *.google.com.hk *.bloglines.com image.soso.com bing.com cn.bing.com image.baidu.com *.feedburner.com *.feedsky.com; if ($invalid_referer) { rewrite ^/ http://你的域名/slyar_hotlinking.png; } } |
expires 30d; //客户端缓存时间,无关盗链
access_log off; //不记录图片访问日志,无关盗链
valid_referers none blocked... //允许访问图片的站点,blocked支持前缀通配符。none需要解释一下,如果你不知道HTTP Refer是什么,那就不知道好了,如果你知道,那这个none就表示匹配没有Refer的访问,通俗点说就是直接用URL访问的,这里我写着表示允许,如果你连直接输入图片地址都不允许看到图片的话,可以删掉这个参数
代码如下 | 复制代码 |
rewrite ^/ http://你的域名/slyar_hotlinking.png; |
//盗链请求跳转到某个图片或者某个页面,随便
5、:wq保存退出
6、重新加载Nginx配置文件,done
代码如下 | 复制代码 |
/etc/init.d/nginx reload |
NginxHttpAccessKeyModule实现防盗链
需要先安装nginx的NginxHttpAccessKeyModule模块。其运行方式是:如我的nginx目录下有一个file.gz 的文件。对应的URI 是http://你的域名/nginx/file.gz
若用ngx_http_accesskey_module 后则根据用户的IP生成一个key值,如下的链接来访问http://你的域名/download/file.zip?key=23497sdf897. 只有给定的key值正确了,才能够下载nginx目录下的file.gz,这样就可以避免被盗链了。