背景

2021年底jsdelivr被取消备案,2022年5月份开始出现dns污染的情况,前两天打开博客图片全都裂了,为了保险起见防止后面cdn永久被墙决定修改图片访问方式,使用自己的备案域名解析到github图片仓库防止被dns污染。

准备工作

  • 已经解析到github的github.io下的域名一个
  • 博客图床的仓库必须在同一个账号下
  • 不会被墙的dns解析服务(我使用的是腾讯的dnspod)

步骤

  1. 打开github图床仓库,添加一个readme.md文件,随便写几句

    这个文件是作为首页使用的,如果想自己设计一个index.html的静态页面也可以,但是不能没有,如果没有的话后面启用https的那个步骤可能 不会成功

    image-20220531170230329

  2. 登陆你的域名解析控制台,添加以下cname值:

    • 主机记录:可以自己定义,我这里设置成blogimages
    • 记录值:填写解析到你github.io那个仓库的域名,我是把happyshark.cn解析到了HPShark.github.io,所以这里的记录值填hapyshark.cn

    image-20220531171159648

  3. 返回图床仓库顶部,点击Settings——Pages

    • 在Source下选择你的图床分支,我的是默认master就选择master。
    • Theme Chooser这里如果你在第一步生成的md文件,那就选择一个主题他会帮你把md文件渲染成首页,如果第一步使用的是你自己的index.html静态网页那就不用管这个。
    • Custom domain这里填写你的解析域名,也就是第二步中的内容,我这里填的是blogimages.happyshark.cn,填写完点击save,会自动检测解析是否成功
    • 解析成功后可以勾选下面的Enforce HTTPS,开启https(免费自动续期,不用操心隔一段时间要去续期)

    填写完之后就可以把blogimages.happyshark.cn解析到github图床仓库了

    image-20220531171918953

配置完成之后随便打开一张图片,比如要访问我的图床仓库-hello-world-20200324151821.png这个文件
image-20220531172430163

那浏览器中应该输入的地址应该如下:

1
https://blogimages.happyshark.cn/hello-world/20200324151821.png

可以看到成功访问了该图片:

image-20220531172737655

如何批量替换老域名

使用python脚本一键替换即可,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# coding=utf-8
import os
import re

OLD = "https://cdn.jsdelivr.net/gh/HPShark/blogimages@master/" #原来的cdn加速地址前缀
NEW = "https://blogimages.happyshark.cn/" #修改为你解析域名地址前缀
path = "_posts" # 修改为博文存放的目录


def main(path):
file_list = [os.path.abspath(os.path.join(root, file)) for root, _, files in os.walk(path) for file in files]
print(file_list)

print("start ..\n")
for f in file_list:
content = ""
with open(f, "rb") as fp:
file_content = fp.read()
content = re.sub(OLD, NEW, file_content.decode('utf-8'))
with open(f, "wb") as fp:
fp.write(content.encode('utf-8'))


if __name__ == '__main__':
main(path)

放文章的文件夹_posts和python脚本需要放在同一目录下
image-20220531173818414

以上代码会把_posts文件夹下的所有文件中的图片一次性修改,比如将某条博文中图片的url

1
https://cdn.jsdelivr.net/gh/HPShark/blogimages@master/hello-world/20220513103605.png

替换为

1
https://blogimages.happyshark.cn/hello-world/20220513103605.png

如何在博文中插入用新域名解析的图片

以PicGo为例,在github图床的设置界面按以下方式设置即可:

image-20220531173113105

存在的bug

  • 使用这种方式后每上传一张图片都会触发一次该仓库的action,所以上传完图片的几分钟内所有图片依然看不了(action正在渲染),这个时间一般在1~2分钟左右,高峰期可能会更慢。渲染完成之后就可以正常解析图片了。

    image-20220531174115766