Nginx
的防盗链原理是加入
location
项,用正则表达式过渡图片类型文件,对于信任的网址可以正常使用,
对于不信任的网址则返回相应的错误图片,在源主机(
bt.com
)的配置文件中加入以下代码:
vi
/usr/local/nginx/conf/nginx.conf
location ~*\.(jpg|gif|swf)
$
{
valid_referers none blocked *.test.com test.com;
if
(
$invalid_referer
) {
rewrite ^/http://www.bt.com/error.png;
}
}
下面分析一下这段代码:
~*\.(jpg|gif|swf)
$
:
这段正则表达式表示匹配不区分大小写,以
.jpg
或
.gif
或
.swf
结尾的文件。
valid_referers
:设置信任的网站,可以正常使用图片。
none
:浏览器中
referer
为空的情况,这就是直接在浏览器访问图片。
blocked
:浏览器中
referer
不可空的情况,但是值被代理或防火墙删除了,这些值不以
http://
或
https://
开头。
后面的网站或者域名:
referer
中包含相关字符串的网址。
if
语句:如果链接的来源域名不在
valid_referers
所列出的列表中,
$invalid_referer
为
1
,则执行后
面的操作,即进行重写或返回
403
页面。
把图片
error.png
放到源主机(
bt.com
)的工作目录下。
ls
/usr/local/nginx/html
50x.html index.html logo.jpg error.png
这是重启服务器,重新访问
http://www.test.com/index.html
,显示的是被重写的图片。