通过Nginx Proxy Manager为自建图床配置防盗链

2024-07-12

1563

1

前言

为了让图片管理起来更方便,也为了让网站中的图片显示起来更稳定,我们前面通过 MinIO 自建了图床。

至于防盗链,我一开始本来想着直接裸奔算了的。毕竟,没什么值得防的,而且我也欢迎大家来“盗”。最重要的是,裸奔的话,我自己也比较方便,文章不需要作任何修改,就可以直接在类似博客园github 的平台上发表。另外,也不必担心防盗链可能对各种搜索引擎的收录造成什么影响。

然而,纠结了好久,最后还是觉得应该为图床做一层最基本的防护。

1. 为何需要防盗链

其实我写文章主要就是记录一些经验心得,目的就是为了让大家看到,文中的截图也是一样的,并不会在意读者是从哪里看到的。

但考虑到有些情况,如机器人采集,文章被转载了,但文中的图片依然指向我的服务器,使其承受不该承受之重。对于一个宁愿忍受网站不稳定,也要使用 jsDelivr 作为免费图床的吝啬鬼来讲,我都强忍着通过一些骚操作把流量打到其它地方去的冲动,怎么可能忍得了别人把流量打到我的服务器上来呢?

基于这一点,我感觉图片防盗链还是很有必要的。毕竟,对个人网站而言,流量太珍贵了,因为通常情况下,CPU、内存、硬盘等其它服务器资源,基本上是用不完的,唯独带宽最容易达到瓶颈,所以能省还是应该省一点的。

2. 如何配置防盗链

前面说了那么多,全是前戏,其实防盗链配置起来特别简单。由于我们是使用 MinIO 搭建的图床,然后又通过 Nginx Proxy Manager(NPM) 进行了反向代理。

因此,实际上我们有两种方式可以配置防盗链。一种是通过 MinIO 的管理后台编辑访问策略,如下图所示:

通过自定义配置,可以实现防盗链。但这个有些麻烦,并且不能通用,万一我们后面又换成另外一个图床呢?

而另一种是通过 NPM 实现,这是一种更简单、更通用的方式。

3. 操作步骤

经过了前面高频的出场,我想 NPM 大家已经很熟悉了,因此,这里不再介绍。直接编辑imgs.ilaozhu.com(图床的 API 地址) 这一条,如下图所示:

转到 Advanced 标签,把下面的配置改成你自己的,然后复制进去,点击保存就可以了。

location ~* \.(gif|jpg|png|bmp)$ {
    valid_referers none blocked ilaozhu.com *.ilaozhu.com ~\.google\. ~\.bing\. ~\.baidu\.;
    if ($invalid_referer) {
        return 403;
    }
    proxy_pass http://minio:9001;
}

截图如下:

怎么样?是不是很简单?

事实上,不仅简单,而且还很通用,适用于几乎所有的图床。而且 NPM 本质上就是 Nginx,因此,即使没有部署 NPM,但只要部署了 Nginx ,就依然可以使用这种方式。

下面简单解释一下这段配置:

  • (gif|jpg|png|bmp)指定防盗链的图片格式。事实上,不仅仅是图片,jscss、音频、视频等静态资源也是可以的;
  • valid_referers 相当于一个白名单列表,里面配置的都是放行名单,支持正则表达式;
  • none 表示允许请求报文中没有 referer 的情况,目的是为了让图片能直接通过浏览器地址栏打开;
  • blocked 表示允许请求报文中有 referer ,但值为空或无效的情况,主要是为了应对请求通过防火墙或代理服务器时,referer 的值被删除或伪装的情形;
  • ilaozhu.com 是允许的主域名,*.ilaozhu.com 是允许的所有子域名;
  • ~\.google\. ~\.bing\. ~\.baidu\. 等是为了不影响各大搜索引擎收录的,当然,如果还想放行其它的网站也可以继续追加,如github等。

事实上,这种方式是一种最基础的防护手段,属于防君子不防小人的行为。如果有人恶意攻击,肯定也是防不了的。但足够了,我想真的没什么人会闲的没事来攻击我们这种小网站,毕竟,攻击也是有代价的。

4. 客户端设置


上一篇文章我们把 PicListendPoint自定义域名都设置成了imgs.ilaozhu,com,但现在我们针对imgs.ilaozhu,com配置了防盗链。因此,本地的 PicList 就无法再操作图床了。

解决这个问题也很简单,只需要为endPoint单独分配一个不做防盗链的域名就可以了。由于前面已经操作很多次了,我相信大家都会,这次就不再截图演示了。

结语

好了,本来一行配置就搞定的事,硬是水了一篇一千多字的文章,有点佩服我自己了。不过话说回来,不难看出,Nginx Proxy Manager 真的是既方便又好用,还没用起来的赶紧也试试吧!

推荐阅读

相关推荐

  1. 通过MinIO + PicList自建图床 2024-07-04
  2. 通过 Github + jsDelivr + PicGo 配置免费图床 2024-04-19

本文作者: 老朱

原文链接: 通过Nginx Proxy Manager为自建图床配置防盗链

版权声明: 本站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

免责声明: 文中如涉及第三方资源,均来自互联网,仅供学习研究,禁止商业使用,如有侵权,联系我们24小时内删除!

图床 防盗链

评论3

😊 😃 😄 😁 😆 😅 😂 🤣 🙂 🙃 😉 😇 😏 😌 😍 😘 😗 😙 😚 😋 😛 😜 😝 😒 😔 😖 😞 😟 😠 😡 😳 😨 😰 😥 😢 😭 😱 😲 😵 😷 🤒 🤕 🤢 😴 🤤 😪 😫 😬 😮 🤲 🤜 🤛 🤚 🤝 🙏 🤞 🤟 🤘 🤙 👌 👍 👎 👊 👏 🙌 👐 💪
  1. kk_

    问下大佬的后台服务和minio服务是部署在一台机器上吗?如果需要存储大量图片,比如最大空间为500G,是不是需要一台后台服务器和一台对象存储服务器呢?

    2024-09-30 13:39
    1. 老朱

      我是为了节省成本,所以部在了同一台服务器上,你这么大量的话,最好还是用对象存储服务,用多少买多少,会方便很多,而且也不占应用服务器的带宽

      2024-09-30 14:01
  2. xyt

    这个文章里有没有能加上大纲的插件啊大佬

    2024-07-17 09:54