语法:valid_referers none | blocked | server_names | string ...;
# none 表示无Referer值的情况(表示空的,也就是直接访问,比如直接在浏览器打开一个图片)
# blocked 表示Referer值被防火墙进行伪装,如:“Referer: XXXXXXX”。
# server_names Referer来源头部包含当前的server_names(当前域名)
# arbitrary string 任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉
# regular expression 正则表达式,~表示排除https://或http://开头的字符串.
在Nginx Web服务器的配置文件nginx.conf server中新增location,如下:
切记不用加端口,比如valid_referers none blocked localhost:8888 127.0.0.1:8888
location ~* \.(gif|jpg|swf)$ {
# http://localhost:8888/a.html 通过
# valid_referers none blocked localhost ;
# http://localhost:8888/a.html 通过
# http://127.0.0.1:8888/a.html 通过
# valid_referers none blocked localhost 127.0.0.1 ;
# http://localhost:8888/a.html 阻断
# http://127.0.0.1:8888/a.html 阻断
# valid_referers none blocked localhostt 127.0.0.2 ;
# ????????????server_names 不懂,慎用 ?????????????????????
# yes http://127.0.0.1:8888/a.html 阻断
# no http://localhost:8888/a.html 通过 ???
# 域名能访问,ip被阻断;server_names不是很懂,求解???????????
# 所有来至ybl和域名中包含google和baidu的站点都可以访问到当前站点的图片,事实并没有这个效果????
valid_referers none blocked ybl server_names ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
# rewrite ^/ http://localhost:8888/6055.png;
return 403;
}
}
如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户