防盗链,也被称为热点防护或者盗链保护,主要是防止其他网站盗用你的资源(如图片、视频等),导致你的服务器带宽和资源被滥用。在Nginx中,可以通过设置location中的valid_referers指令来实现防盗链。
Nginx防盗链配置示例:
server {
listen 80;
server_name example.com;
location /images/ {
valid_referers none blocked $http_referer;
if ($invalid_referer) {
return 403;
}
# 其他location配置...
}
}
在这个例子中,任何尝试访问/images/目录下的资源的请求,都需要提供一个referer头,并且这个referer必须是example.com的子域名,否则返回403错误。
但是,这种方式可能会误伤到一些不带referer的合法请求,例如直接在浏览器地址栏输入URL的情况。因此,更常见的做法是允许没有referer的请求,只阻止那些referer不正确的请求:
location /images/ {
valid_referers none blocked example.com;
if ($invalid_referer) {
return 403;
}
}
在这个例子中,没有referer的请求,或者referer为example.com的请求,都会被视为有效请求。
注意:$http_referer变量只有在HTTP Referer头部存在时才会被设置,因此如果客户端禁用了发送Referer头部,那么所有请求都将被视为没有referer,这也就是为什么我们需要在valid_referers中包含none的原因。