使用referer模块防盗链
该模块默认安装了
防盗链是通过结合 valid_referers指令和 $invalid_referer变量完成的。
valid_referers none|block|server_names|自定义url|正则 ...
上下文: serve/location
none 表示请求头中没有referer也可以通过
block 请求头有referer 但referer内容为空可以通过
server_names 请求头中referer的值与server_name中的某个域名匹配则允许访问。
自定义url 可以指定自定义域名或者url字符串,可使用*通配符匹配头部或者尾部
正则 如果使用正则,要在开始加上~
PS:如果refer中含有文件路径,如 referer:http://abc.com/nn,而规则中 abc.com可以通过,则http://abc.com/nn也可以通过。但是如果域名错了 referer:http://abc.comnn 则不通过
invalid_referer变量
如果通过了valid_referers指令的判定,则返回1,否则为空。
实际情况下,如果在html文件中引用了别的域名的图片或者css/js,那么用F12查看network中对该图片或者css/js的请求头是有referer这个项的,当然请求自己域名的静态资源都会有referer这个请求头,这都是服务端加上的。
如果请求的是页面就不会有referer这个请求头。
例子:
curl http://referer.zbpblog.com:8080/ # OK
curl -H "referer:" http://referer.zbpblog.com:8080/ # OK
curl -H "referer:https://referer.zbpblog.com" http://referer.zbpblog.com:8080/ # OK
curl -H "referer:https://referer.zbpblog.com/abc" http://referer.zbpblog.com:8080/ # OK
curl -H "referer:https://abc.zbpblog.com" http://referer.zbpblog.com:8080/ # OK
curl -H "referer:https://zbpblog.com" http://referer.zbpblog.com:8080/ # 403 不匹配 *.zbpblog.com 少了一个. 写成 *zbpblog.com 会报语法错误。如果想匹配 zbpblog.com只能使用 "zbpblog.com"
curl -H "referer:https://www.zbpblog.com/nn" http://referer.zbpblog.com:8080/ # OK
curl -H "referer:https://www.zbpblog.comnn" http://referer.zbpblog.com:8080/ # 403
curl -H "referer:https://www.google.com/abc" http://referer.zbpblog.com:8080/ # OK 使用正则~google,则Referer中只要有google字样就能通过
curl -H "referer:https://www.baidu.com/abc" http://referer.zbpblog.com:8080/ # OK
curl -H "referer:https://www.baidu.com" http://referer.zbpblog.com:8080/ # 403