nginx防盗链
场景:
以图片为例
A网站想不经过B网站允许使用B网站的图片。A网站中直接用B网站上图片的链接,或者去B网站上点击图片右下下载并使用,这一行为称之为盗用。那么B网站要想阻止这一行为,可以采用防盗链来阻止。采用防盗链之后,A网站想盗用,就会提示404或者别的指定页面。
nginx防盗链配置
location ~ .*\.(gif|jpg|jepg|png|PNG|bmp|flv|wma|wmv|swf|mp3|zip|rar|torrent)$ {
valid_referers none blocked www.myjpg.com *.myjpg.com //白名单 就是允许这两个域名访问
if ($invalid_referer) {
#rewrite跳转到那张图片,也可以直接return错误代码
rewrite ^/ http://www.***.com/static/imgs/error.jpg;//跳转一个图或者一个页面
#return 404;//报404也可以
}
}
valid_referers配置
Nginx配置中有一个指令valid_referers,用来获取Referer头域中的值,并且根据该值的情况给Nginx全局变量$invalid_referer的值,如果Referer头域中没有符合valid_referers指令配置的值,$invalid_referer变量将会被赋值为1,否则就是0。
valid_referer指令的语法结构为:
valid_referers none | blocked | server_names | string ....;
- none Referer头域不存在的请求,若果容许则加上 none
- blocked Referer头域的值被防火墙或者代理服务器删除或伪装的情况,如果容许则加上blocked。这种情况下,该头域的值不以“http://”或者“https://”开头
- string 采用正则表达式来匹配referer server_names 设置一个或多个URL,检测Referer头域的值是否是这些URL中的某个。
- 从nginx 0.5.33以后支持使用通配符“*”。