当前位置:首页 > 服务器技术 > 正文

Nginx Referer检查(手把手教你防止图片盗链与资源滥用)

在搭建网站时,你是否遇到过别人直接引用你网站上的图片、视频或文件?这不仅会消耗你的服务器带宽,还可能带来安全风险。为了解决这个问题,Nginx 提供了一个非常实用的功能——Referer 检查

本文将用通俗易懂的方式,带你一步步配置 Nginx 的 Referer 检查功能,实现防盗链,保护你的网站资源不被非法盗用。即使你是刚接触服务器配置的小白,也能轻松上手!

什么是 HTTP Referer?

Referer(注意拼写是 Referer 而不是 Referrer)是 HTTP 请求头中的一个字段,用于标识当前请求是从哪个网页跳转过来的。例如,当用户从 A 网站点击链接跳转到 B 网站时,B 网站收到的请求中就会包含 Referer: https://a.com

利用这个特性,我们可以在 Nginx 中设置规则:只允许来自自己网站的请求访问某些资源(如图片、CSS、JS 等),拒绝其他来源的请求。

Nginx Referer检查(手把手教你防止图片盗链与资源滥用) Referer检查 防盗链配置 Nginx安全设置 HTTP Referer验证 第1张

Nginx Referer 检查配置步骤

要启用 Referer 检查,我们需要使用 Nginx 的 valid_referers 指令。下面是一个完整的配置示例:

server {    listen 80;    server_name yourdomain.com;    location ~* \.(jpg|jpeg|png|gif|mp4|css|js)$ {        valid_referers none blocked yourdomain.com *.yourdomain.com;        if ($invalid_referer) {            return 403;            # 或者你可以返回一张“禁止盗链”提示图:            # rewrite ^/.*$ /images/forbidden.png last;        }    }}  

配置说明:

  • location ~* \.(jpg|jpeg|png|gif|mp4|css|js)$:匹配所有以这些后缀结尾的静态资源文件(不区分大小写)。
  • valid_referers:定义哪些 Referer 是合法的。
    • none:允许没有 Referer 的请求(比如用户直接在浏览器地址栏输入图片 URL)。
    • blocked:允许 Referer 被防火墙或代理删除的情况(值非空但被隐藏)。
    • yourdomain.com*.yourdomain.com:允许来自你自己的主站和子域名的请求。
  • $invalid_referer:如果请求的 Referer 不在 valid_referers 列表中,该变量为 true。
  • return 403;:返回 403 禁止访问错误。你也可以选择重定向到一张提示图片。

测试你的防盗链配置

配置完成后,记得重新加载 Nginx:

sudo nginx -s reload

然后你可以这样测试:

  1. 在浏览器地址栏直接打开你的图片链接 → 应该能正常显示(因为 Referer 为 none)。
  2. 在另一个网站的 HTML 中插入你的图片链接:
    <img src="https://yourdomain.com/image.jpg">
    → 图片应无法加载(返回 403)。

注意事项

虽然 Referer 检查是一种简单有效的Nginx安全设置手段,但它并非万无一失:

  • Referer 可以被伪造(不过普通用户很难做到)。
  • 部分浏览器或隐私插件会屏蔽 Referer,可能导致合法用户无法加载资源。因此建议保留 noneblocked
  • 对于高安全性需求,建议结合 Token 验证、IP 白名单等更高级的方案。

总结

通过 Nginx 的 Referer 检查功能,你可以轻松实现基本的防盗链配置,有效防止他人盗用你的带宽和资源。这项技术是每个网站管理员都应该掌握的HTTP Referer验证基础技能。

希望这篇教程能帮助你理解并成功配置 Nginx Referer检查!如果你觉得有用,欢迎分享给更多朋友。