12Reads资讯
企业管理新媒体

Nginx ngx_http_referer_module模块根据referer屏蔽或禁止访问

ngx_http_referer_module模块可根据header中的referer信息屏蔽某些请求对网站或应用的访问,可以起到禁止直接访问网站static files的作用(防盗链或保护文件)。

尽管nginx官方反复强调伪造一个referer并非难事,但还是提高了技术门槛,可以限制多数普通用户。

配置示例

valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;

if ($invalid_referer) {
return 403;
}

valid_referers 代表可信referer,此处可信referer的设置将会使变量$invalid_referer的值为「0」,反之$invalid_referer的值为「1」,则执行IF条件名并返回相关限制结果。

none是指当referer为空的时候,比如在链接器中直接打开一个图片链接,若要禁止用户直接访问,则必须省掉none。

blocked 是指经过某些代理或firewall过滤后的referer,比如省略了url前缀等, 同样地,若要禁止用户直接访问,则必须省掉blocked。

server_names 是nginx配置文件中的server name项,代指网站域名。

实例:禁止直接访问

下面的实例,禁止所有用户(包括search engine)直接访问网站上的css资源并返回错误代码502:

location ~ .css$ {
valid_referers www.12reads.cn;
if ($invalid_referer) {
return 502;
}
}

也可直接将域名http://www.12reads.cn/,使用server_names代替:

location ~ .css$ {
valid_referers server_names;
if ($invalid_referer) {
return 502;
}
}

这样,直接访问.css文件时,nginx会返回502,但页面调用.css文件时仍可正常使用,因为referer合法,$invalid_referer为0。

喜欢 (0)
分享到:

评论 抢沙发

登录后发表你的伟大言论!

立即登录  

成就高成效,实现管理能力快速提升,12Reads系列管理培训教材全场限时特惠! 立即购买 PURCHASE NOW