当前位置: 首页 > article >正文

打通最后一公里:使用CDN加速GitHub Page的访问

无论是互联网从业者还是科研人员,使用Github Page能够很友好的建立个人网站。

目前比较主流的方案是使用GitHub Page托管文字网页,利用GitHub仓库托管图床,稳定可靠(Gitee的page突然撤退,让人不敢再将图床放到上面,即使速度很快)。

然而,由于众所周知的原因,GitHub的访问在国内不是很流畅,限制策略主要是限流,所以大多数情况下文字网页都能够加载,但是存在GitHub图床上的图片无法加载,这时候利用CDN能够很好的解决这个问题。

原理:什么是CDN

大白话图解:什么是 CDN

在这里插入图片描述

什么是 CDN?

想象一下你在网上购物,找到了一件很喜欢的商品,但卖家在世界的另一端。商品需要经过漫长的运输,才能到达你的手中。这个过程可能需要几天甚至几周。可如果这个商品在你附近的仓库里有存货,那么你就可以很快地拿到它。这就是 CDN 的工作原理。(这不就是京东的库存管理模式嘛。。。)

CDN,全称 Content Delivery Network(内容分发网络),就像是一个全球化的仓库网络。它会把你网站的内容(比如图片、视频、网页文件)存放在离用户最近的服务器上。这样,当有人访问你的网站时,内容就会从最近的服务器发送到他们的设备上,而不是从一个遥远的服务器那里传输过来。

CDN 的好处

  1. 加速访问速度: 无论用户在哪个国家或地区,CDN 都会让他们从最近的服务器获取内容,减少等待时间。

  2. 提升网站稳定性: 如果某个服务器出现故障,CDN 会自动从其他服务器提供内容,不会影响用户的访问体验。

  3. 减少带宽消耗: 因为 CDN 服务器会缓存内容,减少了对源服务器的请求次数,从而降低了服务器的负担和带宽使用。

  4. 提高安全性: CDN 可以帮助抵御恶意攻击,比如分布式拒绝服务(DDoS)攻击,因为它能把流量分散到多个服务器,防止某个服务器因流量过大而崩溃。

为什么 CDN 能够绕过防火墙的限制?

CDN(内容分发网络)本身并不是为了绕过防火墙的限制而设计的,但在某些情况下,使用 CDN 可能会间接地改善访问体验,尤其是在跨境访问受限的网站时。以下是一些关键原因:

  1. 分布式网络架构:
    CDN 的节点遍布全球,包括在国内的一些节点。通过 CDN,用户可以从距离自己最近的节点获取内容,而不是直接从海外服务器请求数据。这种方式减少了跨境流量,从而降低了被防火墙拦截或减速的风险。

  2. CDN 域名的信誉:
    大型 CDN 提供商如 Cloudflare、Akamai 等通常有良好的网络信誉,其域名和 IP 地址在国内外的访问通常不受限制。这意味着,即使某个源网站(如 GitHub)可能受到防火墙的管制,但通过 CDN 的加速域名,用户依然能够较为顺畅地访问其内容。

  3. 混淆流量来源:
    当内容通过 CDN 分发时,访问请求不再直接指向原始服务器(如 GitHub 的服务器),而是通过 CDN 节点来提供内容。这种方式可以让流量看起来像是访问 CDN 提供商,而不是原始网站,可能会绕过某些网络限制。

为什么不使用 CDN 时,国内访问 GitHub 会很慢?

国内访问 GitHub 速度慢的原因主要与跨境流量受限和防火墙的控制有关:

  1. 跨境网络拥堵:
    国内访问 GitHub 时,数据包需要经过国际出口,这些出口通常带宽有限,且高峰期容易拥堵,导致速度变慢。

  2. 防火墙的流量监控:
    中国的防火墙(也称为“长城防火墙”或 GFW)会对特定的国际网站进行流量监控,甚至限制。这种监控可能包括对流量进行延迟、限制带宽或完全阻断,从而导致访问 GitHub 的速度非常慢。主要影响手段包括:IP 封锁、域名封锁、流量审查、关键词过滤等。

  3. DNS 污染:
    有时防火墙会通过 DNS 污染来阻止或干扰对 GitHub 等网站的访问,即返回错误的 IP 地址,导致无法连接或速度极慢。

准备工作

在开始使用 Cloudflare 加速自定义域名下的 PicGo 图床之前,我们需要准备以下几样东西:

  1. 一个 GitHub 仓库

    • 你需要一个 GitHub 仓库来存放通过 PicGo 上传的图片。如果你还没有仓库,可以在 GitHub 上免费创建一个。
  2. PicGo 安装及配置

    • 下载并安装 PicGo,这是一款开源的图片上传工具,支持多种图床,包括 GitHub。
    • 配置 PicGo,使其能够将图片上传到你的 GitHub 仓库。
  3. 一个自定义域名

    • 你需要一个已经注册的域名(如 example.com),并有权管理它的 DNS 设置。如果你还没有域名,可以通过域名注册商购买一个。
  4. Cloudflare 账号

    • 你需要在 Cloudflare 上注册一个免费账号,用于管理你的自定义域名和设置 CDN 加速。
  5. 访问你域名的 DNS 设置的权限

    • 为了将你的域名接入 Cloudflare,你需要能够访问并修改域名的 DNS 设置(通常通过你的域名注册商的控制台)。

实际操作

1. 部署 PicGo 图床为网站

首先,我们需要将 PicGo 图床部署成一个网站。PicGo 是一个用于快速上传图片并生成外链的工具,它通常将图片上传至 GitHub 仓库中。

  • 在 GitHub 上创建一个仓库,用于存放通过 PicGo 上传的图片。
  • 配置 PicGo,使其将图片上传到该仓库,并生成图片链接。

接下来,我们使用 GitHub Pages 或其他静态网站托管服务,将这个仓库部署成一个网站。

2. 添加自定义域名

为了使用自己的域名访问这些图片,可以为这个网站添加一个自定义域名。步骤如下:

  1. 购买域名:如果还没有域名,可以通过域名注册商购买一个符合需求的域名。
  2. 配置 DNS:在域名注册商的控制台中,添加一条 CNAME 记录,将自定义域名指向 GitHub Pages 提供的地址(例如 yourusername.github.io)。
  3. 配置 GitHub Pages:进入你的 GitHub 仓库设置页面,找到 GitHub Pages 部分,并设置自定义域名。

3. 使用 Cloudflare 代理域名

为了进一步加速访问速度,我们可以将自定义域名接入 Cloudflare,并利用其全球 CDN 网络进行加速。

  1. 注册并登录 Cloudflare:访问 Cloudflare 网站,注册并登录账号。
  2. 添加网站:在 Cloudflare 仪表盘中,点击“Add a Site”,输入你的自定义域名,并跟随指示完成配置。
  3. 更新 DNS 服务器:根据 Cloudflare 的提示,将你的域名 DNS 服务器更新为 Cloudflare 提供的 DNS。
  4. 启用代理:在 Cloudflare 仪表盘中,确保你的自定义域名的 DNS 记录被 Cloudflare 代理(显示橙色云朵图标)。
  5. 配置 SSL:在 Cloudflare 的 SSL/TLS 设置中,选择“Full”模式,以确保访问时使用 HTTPS 加密。

4. 效果验证

完成以上配置后,所有通过自定义域名访问的图片资源将通过 Cloudflare 的 CDN 网络加速。这不仅能显著提升全球访问速度,还能提升网站的安全性和可靠性。

你可以使用浏览器开发者工具检查图片资源的加载时间,并验证 Cloudflare 是否已经成功代理了这些请求。你还可以利用 Cloudflare 仪表盘中的分析工具,监控流量和缓存的命中率。

总结

通过将 PicGo 图床部署成一个网站,并添加自定义域名,然后使用 Cloudflare 进行代理,我们可以显著提升图片的访问速度。这种方法不仅灵活,还能充分利用 Cloudflare 强大的 CDN 和安全功能,为用户提供更好的访问体验。

CDN 的力量在于它能加速内容传递,优化全球访问。无论你是在构建个人网站,还是部署企业应用,CDN 都是不可或缺的一部分。


http://www.kler.cn/news/309928.html

相关文章:

  • 分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
  • No module named MYSQLdb 问题解决
  • 《深度学习》—— PyTorch的神经网络模块中常用的损失函数
  • Unity 百度AI实现无绿幕拍照抠像功能(详解版)
  • Flask-JWT-Extended登录验证
  • 构建常态化安全防线:XDR的态势感知与自动化响应机制
  • python学习笔记目录
  • JS全选反选案例
  • 海杂波分级方法
  • springboot项目中 前端浏览器访问时遇到跨域请求问题CORS怎么解决?has been blocked by CORS policy
  • 【UEFI基础】BIOS模块执行的优先级
  • 集成网口连接器国产化替代--RJ45内置网络变压器网口生产工厂在行动
  • HarmonyOS学习(十一)——安全管理
  • 说说synchronized的锁升级过程
  • 请求转发和重定向的区别
  • Eureka原理与实践:构建高效的微服务架构
  • 宠物空气净化器该怎么选?希喂、352、霍尼韦尔哪款对吸附浮毛有效
  • Python协程详解
  • uniapp中使用uni.$emit和uni.$on在vue和nvue页面之间传值但是无法赋值的问题
  • HarmonyOS 实现自定义启动页
  • 鸿蒙开发协调布局CollapsibleLayout
  • Unity3d 以鼠标位置点为中心缩放视角(正交模式下)
  • 待办: 杂七杂八——大杂烩.....懒得整理了,我自己凑合看
  • 新手学习Python第七天-新手笔记
  • 基于STM32C8T6的CubeMX:HAL库点亮LED
  • Datawhale X 李宏毅苹果书 AI夏令营 《深度学习详解》第十九章 ChatGPT
  • Python 入门教程(3)基础知识 | 3.6、标准输入与输出
  • c++----模板(进阶)
  • 什么是VHDX文件?
  • 国科云域名解析课堂:一个域名可以解析到多个IP地址吗?