在 linux 中配置 nginx 静态资源防盗链重定向,核心做法是在 `server` 或 `location` 块中使用 `valid_referers` 指令定义合法的来源域名,并通过 `if` 判断非合法来源时执行 `return 302` 重定向到指定页面。这样做可以拦截直接访问图片、视频等资源的请求,将其引导至自定义的防盗链提示页或首页。

如何定义合法来源并触发重定向
通过设置 `valid_referers` 指定允许访问的域名,并在 `if` 条件中检查变量 `$invalid_referer` 是否为空或非空来决定是否返回重定向状态码。当请求头中的 `Referer` 不在白名单内时,Nginx 会立即终止处理并返回 302 跳转。

server {
listen 80;
server_name example.com;
location ~* \.(jpg|jpeg|png|gif|webp)$ {
# 定义合法来源:空 referer(直接输入地址)和特定域名
valid_referers none blocked example.com *.example.com;
# 如果 referer 不合法($invalid_referer 不为空)
if ($invalid_referer) {
return 302 https://example.com/anti-leech.html;
}
root /var/www/html;
expires 30d;
}
}
上述配置中,`valid_referers` 列出了允许的来源。`none` 表示没有 Referer 头的请求(如浏览器地址栏直接输入),`blocked` 表示被防火墙或代理删除了 Referer 的请求。如果请求来自其他未列出的域名,`$invalid_referer` 将被设为 1,从而触发重定向。
重定向目标页面的内容设计
重定向的目标页面通常是一个简单的 HTML 文件,用于告知用户资源受保护或提供替代链接。该页面应放置在 Nginx 配置的根目录下,确保所有重定向请求都能正确加载。

<meta charset="UTF-8"><title>资源受保护</title><h1>抱歉,此资源仅供授权网站使用</h1>
<p>如果您希望展示此内容,请通过正规渠道获取链接。</p>
<a href="/">返回首页</a>
这个 HTML 页面结构简单,包含标题和提示信息,并提供一个返回首页的链接。它不需要复杂的样式,只需确保用户知道当前请求被拦截即可。将此文件保存为 `anti-leech.html` 并上传至 `/var/www/html/` 目录,即可配合前面的 Nginx 配置生效。
如何处理直接访问与跨域引用的差异
当用户直接在浏览器地址栏输入图片 URL 时,由于没有 `Referer` 头,`valid_referers` 中的 `none` 参数会使其被视为合法请求,从而正常显示资源。而来自其他网站的 `` 标签引用则会携带对方的域名作为 `Referer`,若该域名未在白名单中,则会被重定向。这种机制平衡了用户体验和防盗链需求,避免了因严格拦截导致自身网站用户无法查看资源的问题。











