507 字
3 分钟
基于Nginx虚拟主机设置资源防盗链的简单方法
基于nginx的 valid_referer变量可以实现这一功能。
referer是http协议request header中的一个字段,这个字段可以简单的理解为“经手人”,当我们访问某个网站时,我们向这个网站的nginx web server发起了请求,请求解析完成后 nginx会将各种资源和源代码返回给客户端并进行渲染,因此,我们访问的网站可以被视为是我们访问这些静态文件的“经手人”。通过对referer进行限制,可以防止第三方对于资源的获取。
以下代码是一个例子:
valid_referers *.example.com;#定义了合法的referer,二级域名为example.com的所有网站都是合法的refererif ($invalid_referer) #如果referer不合法,则 invalid_referer为1{ return 403; #返回403代码 - 无权限访问}alias /www/wordpress/resources/image/;使用这种方法,所有非指定的referer的访问都会被拒绝,因此,如果用户只是想保存一张图片,仍会收到403错误代码;
下面是另一种方法:
valid_referers none blocked *.example.com; #当referer为空或referer为指定的二级域名时, invalid_referer为0referer if ($invalid_referer) { #如果referer不合法,则 invalid_referer为1 return 403; #返回403代码 - 无权限访问}alias /www/wordpress/resources/image/;none表示空的referer,也就是直接访问,比如直接在浏览器打开一个文件;
blocked表示被防火墙标记过的来路,*..com表示所有子域名。
然而这种方法又存在另外一个缺陷,那就是由于空referer被视为合法,第三方可以通过隐藏referer来实现对资源的盗取。
综上所述,这两种方法都存在缺陷,最好的方法还是通过设置CDN来限制IP来源。
但是既然你已经用了这种方法了,说明你的网站大概率不是什么热门站点。。大概率不会受到那么多资源窃取,因此也不必太过担心。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
基于Nginx虚拟主机设置资源防盗链的简单方法
https://white-festa.net/posts/nginx-referer/ 最后更新于 2022-09-22,距今已过 1188 天
部分内容可能已过时