首先,我们需要知道通过什么来实现防盗的!
http referer 是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上referer,这是在告诉服务器是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理;
1
2
3
4
5
6
|
location /photos/ { valid_referers none blocked 域名/IP; if ($invalid_referer) { return 403; } } |
Http Referer 模块的功能有:
valid_referers :该指令会根据浏览器Referer header头的内容分配一个值0或1给变量$invalid_referer ;
如果referer header 头不符合valid_referers指令设置的有效referer,变量$invalid_referer将被设置为1,那么便会执行if模块中的内容;
该指令的参数有:
none :默认值,表示没referer值(直接访问防盗链中的内容)的情况;
blocked :表示referer值被防火墙伪装;
server_names :表示一个或者多个主机名称,从nginx0.5.33版本开始,server_names中可以使用通配符*;
我们通过一个例子来更深彻的来了解一下防盗链吧!
1
2
3
4
5
6
7
|
location ~* .(gif|jpg|jpeg|png|bmp|swf|flv)$ { valid_referers none blocked 域名/IP; if ($invalid_referer) { rewrite ^/ http: //www.afeige.cn/404.html; #return 404; } } |
第一行:表示对以 gif|jpg|jpeg|png|bmp|swf|flv 结尾的文件进行防盗链;
第二行:表示对 域名/IP 这个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到错误页面,当然直接返回404也是可以的呀!
若 valid_referers none blocked 域名/IP; 中,none 存在;那么在浏览器直接访问域名下的该文件依然也可以访问
为了达到即使在浏览器中输入正确的图片路径,也不允许访问的状态;那么把none删除掉就Ok了!