jsDelivr CDN 切换到阿里云自建加速

jsDelivr CDN 切换到阿里云自建加速

xiaolu
2022-05-20 / 0 评论 / 8 阅读 / 正在检测是否收录...

问题简述

jsdelivr 本来是个服务大众的好站,免费给大家提供加速服务。由于众所周知的原因,一些心怀不轨的人拿这个搞事情,建 TM 什么图床啊,托管什么站点啊,导致其丢失了中国区的备案。白嫖、真香,呵呵。

言归正传啊,本站使用的主题有相当一部分的资源是挂在 jsdelivr 上的,事到如今不切换是不行了。通过 VSCode 打开主题目录搜索了一下,存在 170 多个引用。因此我通过一些网上搜索的 python 脚本实现了较为快速的迁移吧。

操作步骤

  1. 🍉 开启阿里 OSS 和 CDN 服务
    网上的教程很多,我就不重复其他人的工作了。如果有时间的话,还是会写一篇详细的教程,讲清楚每一个步骤的作用,其中确实是有很多坑的,暂时就先默认大家已经开了服务了。
  2. 🍉 提取主题所有 jsdelivr 引用
  3. 🍉 批量下载 jsdelivr 引用 到本地
  4. 🍉 上传文件到阿里 OSS
  5. 🍉 修改主题相关引用的域名

提取 jsdelivr 引用

  1. 首先通过 VSCode 打开站点主题目录,这里可以 clone 主题到本地修改后再上传或使用 VSCode SSH Remote 插件直接修改,推荐 第二种 方法。
  2. 然后点击左侧图标,全局搜索 jsdelivr 关键字,选择 “ 在编辑器中打开 ”,按下 Ctrl + S 保存搜索记录到本地,命名为 links.txt
  3. 新建如下内容的 python 脚本,修改 TAG1 和 TAG2 两处,TAG1是脚本要搜索的目录,新建一个空白文件夹,把上面的 links.txt 放进来;TAG2 是结果导出位置。这个脚本来自 csdn ayesawyer

    import re
    import os
    # TAG 1
    path=r'C:\\Users\\Nickel\\Desktop\\temp'
    file_path=[]
    for filename in os.listdir(path):
     file_path.append((os.path.join(path,filename)))
    print (file_path)
    for adress in file_path:  
     file_object=open(adress,'rb')
     lines = file_object.readlines( )
     file_object.close()
     new_lines=[] 
     for x in lines: 
         new_x = x.split( )
         for i in new_x:
             try:      
                 data=i;
                 data = data.decode('utf-8')
                 match_obj=re.search(r"https://.*",data)  
                 if match_obj:  
                     new_lines.append(match_obj.group())  
             except:
                 continue
    final=new_lines
    # TAG 2
    file_2=open(r'D:\\result.txt','w+')
    for x in final:
     for k in range(len(x)):
         if (x[k]=="\""):
             x=x[:k]
             break;
     file_2.write(x)  
     file_2.write('\n')  
    file_2.close()
  4. 上面导出的结果文件还需要二次简单修改,主要问题有:

    • 末尾可能会有单引号,逗号
    • 不包括 //cdn.hello.com/xxx 无协议头的链接
    • 不包括 http 协议链接

批量下载

首先新建如下内容的 Python 脚本,这个脚本来自 csdn DarkAthena

import urllib.request
import requests
import re, os
# 基于 https://zhuanlan.zhihu.com/p/62876301 修改

def get_file(url):
    '''
    递归下载网站的文件
    :param url:
    :return:
    '''

    if isFile(url):
        print(url)
        try:
            download(url)
        except:
            pass
    else:
        urls = get_url(url)
        for u in urls:
            get_file(u)

def isFile(url):
    '''
    判断一个链接是否是文件
    :param url:
    :return:
    '''
    if url.endswith('/'):
        return False
    else:
        return True

hander=urllib.request.ProxyHandler({'http':'127.0.0.1:10809'})
opener=urllib.request.build_opener(hander)

def download(url):
    '''
    :param url:文件链接
    :return: 下载文件,自动创建目录
    '''
    full_name = url.split('//')[-1]
    filename = full_name.split('/')[-1]
    dirname = "/".join(full_name.split('/')[:-1])
    if os.path.exists(dirname):
        pass
    else:
        os.makedirs(dirname, exist_ok=True)
    urllib.request.urlretrieve(url, full_name)

def get_url(base_url):
    '''
    :param base_url:给定一个网址
    :return: 获取给定网址中的所有链接
    '''
    text = ''
    try:
        text = requests.get(base_url).text
    except Exception as e:
        print("error - > ",base_url,e)
        pass
    reg = '<a href="(.*)">.*</a>'
    urls = [base_url + url for url in re.findall(reg, text) if url != '../']
    return urls

if __name__ == '__main__':
    with open('links.txt', 'r') as f:
        lines = f.readlines()
        url_list = []
        for line in lines:
            get_file(line.strip('\n'))

我在它的基础上添加了代理,因为不加代理没办法下载下来的

hander=urllib.request.ProxyHandler({'http':'127.0.0.1:10809'})
opener=urllib.request.build_opener(hander)

然后安装 requests 模块,通过 pip 或 conda 都可以

pip install requests
# 或者
conda install requests

执行这个脚本会在当前目录下载 links.txt 中的链接,记得修改上述脚本中 links.txt 的路径

后续

到这里就很简单了:

  1. 打开阿里云 OSS 控制台,选择上传目录,等待上传完毕
  2. 测试 cdn 链接是否可用
  3. 通过 VSCode 全局查找功能,批量修改 jsdelivr.net 域名为你的 cdn 加速域名

小结

不知道说啥,反正挺无语的。。。又是瞎折腾的一天

0

评论 (0)

取消