防盗链是一种保护服务器资源的手段,防止其他网站直接引用您的服务器上的资源(如图片、视频、文件等),从而节省带宽和资源。Nginx 通过配置 Referer 请求头来实现防盗链。
Nginx 防盗链配置示例
以下是一个简单的 Nginx 防盗链配置示例,允许特定域名访问资源,其他来源则会被阻止访问。
示例配置
假设我们希望保护 /images 目录,只有来自 example.com 和 example.org 的请求可以访问,其他所有来源的请求都会返回 403 Forbidden 状态。
nginx
复制代码
server {
listen 80;
server_name example.com;
location /images/ {
valid_referers none blocked example.com example.org; # 允许的来源
if ($invalid_referer) { # 如果来源无效
return 403; # 返回 403 Forbidden
}
# 正常处理请求的配置
root /var/www/html;
}
# 其他配置...
}
配置说明
-
valid_referers:指定哪些Referer来源是被允许的。none:允许没有Referer的请求(直接输入 URL 的情况)。blocked:允许Referer头被防火墙或代理服务器删除的请求。example.com example.org:允许来自example.com和example.org域名的请求。
-
if ($invalid_referer):检查请求的Referer是否有效。如果Referer不在允许的列表中,Nginx 将设置变量$invalid_referer为1。 -
return 403:如果Referer无效,则返回 HTTP 状态码403 Forbidden,拒绝请求。 -
root /var/www/html:定义正常情况下的资源路径,允许访问的请求将根据此路径提供服务。
高级配置示例
有时候,我们可能希望为防盗链返回一个默认的图片(比如一张“防盗链”的警告图片),而不是返回 403 Forbidden 错误。以下是修改后的配置:
nginx
复制代码
server {
listen 80;
server_name example.com;
location /images/ {
valid_referers none blocked example.com example.org;
if ($invalid_referer) {
rewrite ^/images/.*$ /images/nohotlink.jpg last; # 返回默认图片
}
root /var/www/html;
}
location = /images/nohotlink.jpg { # 定义防盗链图片的位置
root /var/www/html;
}
# 其他配置...
}
配置说明
rewrite:如果Referer无效,则将所有对/images/目录的请求重写到/images/nohotlink.jpg,这张图片会显示“禁止盗链”的信息。location = /images/nohotlink.jpg:指定防盗链图片的实际位置,确保该图片可以被合法访问。
总结
通过配置 Nginx 的防盗链,可以有效保护服务器的资源,防止其他网站未经授权引用您的内容。配置时要小心选择允许的来源和处理无效 Referer 的方式,以确保正常用户的体验不会受到影响。