avatar

麦兜的小站

MDO.INK

  • 首页
  • 随笔
  • 知识库
  • 归档
  • 动态
  • 标签
  • 关于
Home nginx 图片防盗链配置
文章

nginx 图片防盗链配置

Posted 2025-06-24 Updated 2025-06- 24
By power 已删除用户
11~14 min read

什么是 HTTP Referer

HTTP Referer 是一个请求头字段,用于告诉服务器用户是从哪个页面链接过来的。当你从一个网页点击链接跳转到另一个网页时,浏览器会自动在新的 HTTP 请求中添加 Referer 头,其值为上一个页面的 URL。

Referer: https:

这告诉服务器,用户是从 www.example.com/page1.html 这个页面跳转过来的。

核心作用

1. 流量来源分析

网站运营者可以通过分析 Referer 信息了解:

  • 用户从哪些网站访问过来
  • 哪些页面是主要的流量入口
  • 外部链接的效果如何
  • 用户的浏览路径和行为习惯

2. 防盗链保护

许多网站利用 Referer 来防止其他网站直接链接自己的图片、视频等资源。服务器可以检查 Referer 是否来自允许的域名,如果不是则拒绝请求。

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    valid_referers none blocked server_names
                   *.mysite.com *.mydomain.com;
    if ($invalid_referer) {
        return 403;
    }
}

3. 安全防护

用于 CSRF 攻击防护和恶意请求检测:

location /api {
    valid_referers none blocked server_names *.example.com;
    if ($invalid_referer) {
        return 403;
    }
    proxy_pass http://backend;
}

这样就可以检查请求是否来自合法域名(*.example.com)。

著名的拼写错误

HTTP Referer 存在一个著名的拼写错误:正确的英文单词应该是 "Referrer",但在 1995 年制定 HTTP/1.0 规范时被误写为 "Referer"(少了一个 r)。

当错误被发现时,HTTP 协议已经广泛部署,为保持向后兼容性,这个拼写错误被永久保留:

  • HTTP 头部:使用错误拼写 Referer
  • HTML 属性:使用正确拼写 referrer
<meta&nbsp;name="referrer"&nbsp;content="origin">


Referer: https://example.com

Referrer-Policy 策略

为了解决隐私问题,W3C 制定了 Referrer Policy 规范,提供了精细的控制机制,现代浏览器支持 Referrer-Policy 来控制 Referer 的发送行为:

策略值

| 策略 | 描述 | 使用场景 | | --- | --- | --- | | no-referrer | 不发送 Referer | 最高隐私保护 | | no-referrer-when-downgrade | HTTPS 到 HTTP 时不发送,其他情况正常发送 | 现代浏览器默认 | | origin | 只发送协议、域名和端口 | 平衡功能和隐私 | | origin-when-cross-origin | 同源发送完整 URL,跨域只发送域名 | 推荐的默认策略 | | same-origin | 仅同源请求发送 Referer | 内部分析 | | strict-origin | 类似 origin,但 HTTPS 到 HTTP 时不发送: | 较少 | | strict-origin-when-cross-origin | 综合考虑安全性的策略 | 现代浏览器默认 | | unsafe-url | 始终发送完整 URL | 较少 |

设置方法

HTTP 响应头:

res.setHeader('Referrer-Policy',&nbsp;'strict-origin-when-cross-origin');

HTML Meta 标签:

<meta&nbsp;name="referrer"&nbsp;content="strict-origin-when-cross-origin">

元素级别控制:

<a&nbsp;href="https://external.com"&nbsp;referrerpolicy="no-referrer">外部链接</a>
<img&nbsp;src="image.jpg"&nbsp;referrerpolicy="origin">

rel 属性相关值

noreferrer

阻止发送 Referer 头:

<a&nbsp;href="https://external.com"&nbsp;rel="noreferrer">不发送Referer</a>

noopener

防止新窗口访问原窗口对象:

<a&nbsp;href="https://external.com"&nbsp;target="_blank"&nbsp;rel="noopener">安全新窗口</a>

nofollow

告诉搜索引擎不要跟踪链接:

<a&nbsp;href="https://untrusted.com"&nbsp;rel="nofollow">不被索引的链接</a>

组合使用

<a&nbsp;href="https://external.com"
&nbsp; &nbsp;target="_blank"
&nbsp; &nbsp;rel="noopener noreferrer nofollow">
&nbsp; &nbsp;完全安全的外部链接
</a>

总结

HTTP Referer 虽然只是一个小小的请求头,但它承载着 Web 发展的历史,见证了互联网从功能至上到隐私保护的转变。那个著名的拼写错误也提醒我们,技术标准的制定需要更加严谨和谨慎。

知识库
License:  CC BY 4.0
Share

Further Reading

Jul 31, 2025

如何实现接口幂等性

通俗的说,用户在系统中有操作,不管重复多少次,都应该产生一样的效果或返回一样的结果的。 幂等性的概念 幂等(Idempotent)是一个数学与计算机学的概念,常见于抽象代数中。 f(n)=1^n//无...

Jul 19, 2025

10个npm工具包

有了npm之后,前端人员真的是过上好日子了。我们可以直接把别人写好的工具包拿来用,非常的方便。 1.day.js-轻量日期处理 npminstalldayjs importdayjsfrom'd...

Jul 17, 2025

How to set up PHP7.4 on MacOS.

Thisisallverywellandgood.Apartfromonesmallinsignificantthing… TheversionofPHPinuseiscurrently7.4. Th...

OLDER

ubuntu文件夹建立软链接方法

NEWER

MySQL数据库索引的类型、命名规范

Recently Updated

  • 如何实现接口幂等性
  • 10个npm工具包
  • How to set up PHP7.4 on MacOS.
  • Automa:一键自动化,网页数据采集与工作流程优化专家Automa:解锁自动化
  • Mac 下用 brew 搭建 LNMP

Trending Tags

thinkphp clippings

Contents

©2025 麦兜的小站. Some rights reserved.

Using the Halo theme Chirpy