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

打通最后一公里:使用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 都是不可或缺的一部分。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Matlab 的.m 文件批量转成py文件
  • 《机器学习by周志华》学习笔记-神经网络-02感知机与多层网络
  • 解密与推广IAB/MRC零售媒体测量指南
  • fedora silverblue
  • 408算法题leetcode--第八天
  • redis的一主二从三哨兵配置
  • 基于Java的SSM(Spring、Spring MVC、MyBatis)框架构建的远程诊断系统
  • 六种主流ETL工具的比较与Kettle的实践练习指南--MySQL、hive、hdfs等之间的数据迁移
  • AI修手有救了?在comfyui中使用Flux模型实现局部重绘案例
  • 新的 MathWorks 硬件支持包支持从 MATLAB 和 Simulink 模型到高通 Hexagon 神经处理单元架构的自动化代码生成
  • 动手学深度学习(pytorch土堆)-05-1神经网络
  • 【C++】模拟实现vector
  • Spark-ShuffleWriter-UnsafeShuffleWriter-钨丝内存分配
  • 所有用贪心的算法和所有用动态规划(dp)的算法合集
  • 深度学习的笔记
  • Babel配置的不完全指南
  • egg(89)--egg之redis的发布和订阅
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript 奇技淫巧
  • javascript面向对象之创建对象
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js算法-归并排序(merge_sort)
  • Netty 4.1 源代码学习:线程模型
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 盘点那些不知名却常用的 Git 操作
  • 普通函数和构造函数的区别
  • 通过几道题目学习二叉搜索树
  • 微信小程序实战练习(仿五洲到家微信版)
  • 交换综合实验一
  • 正则表达式-基础知识Review
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (ros//EnvironmentVariables)ros环境变量
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (ZT)一个美国文科博士的YardLife
  • (第二周)效能测试
  • (规划)24届春招和25届暑假实习路线准备规划
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十)Flink Table API 和 SQL 基本概念
  • (十一)手动添加用户和文件的特殊权限
  • (转)http-server应用
  • (转)ORM
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .net core Redis 使用有序集合实现延迟队列
  • .Net MVC + EF搭建学生管理系统
  • .net Stream篇(六)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net反编译工具
  • //TODO 注释的作用
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @SuppressWarnings注解