简单三步解决gitee图床问题

杂谈

最近gitee真的不让人省心,之前社区里有热心网友使用的gitee图床,结果在前几天突然gitee加了referrer验证,做了防盗链,然后带来了一波小范围影响

很多开源的项目挂的赞助商的图片全都变成了gitee的logo

图片[1]-简单三步解决gitee图床问题-FancyPig's blog

很多做个人博客的网站,图片也全都变成了这个样子

图片[2]-简单三步解决gitee图床问题-FancyPig's blog

之前我们的热心网友也用了gitee图床,因此部分帖子也出现了这种情况,直接图裂了!

图片[3]-简单三步解决gitee图床问题-FancyPig's blog

那么如何三步解决上面的这个问题呢?

图文教程

下载gitee打包文件

图片[4]-简单三步解决gitee图床问题-FancyPig's blog

下载完成后,我们解压看了一下,目录的格式是xiaonuo-master/xiaonuo-master下有文件

图片[5]-简单三步解决gitee图床问题-FancyPig's blog

上传至阿里云OSS

阿里云OSS控制台中,你可以新建一个bucket,命名随意,譬如fancypig

图片[6]-简单三步解决gitee图床问题-FancyPig's blog

然后新建一个目录

图片[7]-简单三步解决gitee图床问题-FancyPig's blog

我们这里目录名称命名为xiaonuo088(命名随意,按照自己个人习惯),点击上传文件

图片[8]-简单三步解决gitee图床问题-FancyPig's blog

选择扫描文件夹

图片[9]-简单三步解决gitee图床问题-FancyPig's blog

我们选择刚才的文件路径,点上传即可

图片[10]-简单三步解决gitee图床问题-FancyPig's blog

上传完成后,你之前gitee的图床的内容就已经在OSS中了,我们现在要做的就是在网站上做一个替换。

使用sub_filter进行替换

我们使用最简单的方式,那就是nginx里的代理,我们将之前gitee里的路径gitee.com/xiaonuo088/xiaonuo/raw/master替换为OSS的文件路径static.iculture.cc/xiaonuo088/xiaonuo-master

sub_filter gitee.com/xiaonuo088/xiaonuo/raw/master static.iculture.cc/xiaonuo088/xiaonuo-master;
图片[11]-简单三步解决gitee图床问题-FancyPig's blog

这种方式相当于不需要覆盖数据库了,直接在web显示的时候就会进行替换,然后刷新页面,我们发现之前的图片都复活了,是不是还挺简单实用的

图片[12]-简单三步解决gitee图床问题-FancyPig's blog

其他的解决方案

数据库批量替换

如果这里gitee只是临时做了防盗链,未来还有去掉这个策略的可能的话,我们可以选择不替换数据库,但是你如果确定以后弃坑不再用gitee图床了,那好,我们就直接替换数据库中的链接吧!

你可以先搜一下我们的链接出现在哪些表格里

图片[13]-简单三步解决gitee图床问题-FancyPig's blog

我们发现主要存在于这两张表里fancypig_comments(评论内容)、fancypig_posts(推文内容)

图片[14]-简单三步解决gitee图床问题-FancyPig's blog

替换模板

UPDATE 表名 SET 字段 = REPLACE(字段,'待替换内容','替换值');

我们这里可以使用的替换语句

UPDATE fancypig_comments SET comment_content= REPLACE(comment_content,'gitee.com/xiaonuo088/xiaonuo/raw/master','static.iculture.cc/xiaonuo088/xiaonuo-master');

UPDATE fancypig_posts SET post_content= REPLACE(post_content,'gitee.com/xiaonuo088/xiaonuo/raw/master','static.iculture.cc/xiaonuo088/xiaonuo-master');

设置referrer为空

当然,如果你只是个人博客,不需要考虑很多安全因素和交互相关的问题,我们可以采用下面的方式,譬如直接在服务端设置referrer为空

你可以在meta标签里增加

<meta name="referrer" content="no-referrer" />

也可以在img src标签里增加

<img referrer="no-referrer|origin|unsafe-url" src="{item.src}"/>

这样在请求gitee图片时,referrer就为空了,gitee默认允许为空或者带有gitee.com的链接访问他们的资源,这样相当于又钻了空子。

不过设置referrer为空的话,也有弊端,那就是如果你自己的网站有自己的图片远程附件存储,做了referrer验证防止别人盗链这里就会失效,因为你把referrer已经设置为空了(一般我们的策略都不允许referrer为空请求图片附件资源,但是gitee不会,因为如果它设置referrer为空不能请求的话,那我们在浏览器里直接打开gitee的图片就看不了了,这不符合正常人的操作习惯)

© 版权声明
THE END
喜欢就支持一下吧
点赞26赞赏 分享
评论 共5条

请登录后发表评论