CDN CloudFlare 接入 OCI 对象存储

1 篇文章 0 订阅

在当今数字化时代,网站性能和可用性是业务成功的关键。为了提供快速且可靠的访问体验,许多组织正在寻找有效的内容分发网络(CDN)解决方案。CloudFlare作为业界领先的CDN提供商,其强大的全球网络基础设施能够加速网站内容传输,降低延迟,提高安全性。与此同时,Oracle Cloud Infrastructure(OCI)的对象存储服务为用户提供了可扩展的、安全的云存储解决方案。

本文将介绍如何将CDN CloudFlare与OCI对象存储集成,以进一步优化网站性能和可用性。我们将讨论集成的步骤,以及这种集成如何帮助您的网站提供更快速、更可靠的内容交付服务。

1 OCI 中创建对象存储

1.1 创建对象存储(示例中为默认配置)

1.2 CDN 接入对象存储访问类型

CDN 厂商接入的两种方式:

  • 在普通访问模式下,OCI 对象存储需要配置为公共访问类型才能被CDN访问,默认创建的对象存储是私有的
  • 在私有模式下,配置 Pre-Authenticated 的访问方式,允许 CDN 接入 OCI 对象存储

修改为公共访问,允许其他CDN厂商链接

2 OCI对象存储上传测试图片

在 对象存储 页面中点击 upload,进行文件的上传

上传文件

3 配置cloudflare 加入 OCI 对象存储

3.1 登录已注册站点

  1. cloudflare增加别名
  2. 配置workers路由规则
  3. 配置缓存规则
  4. 为站点添加路由规则

3.2 配置DNS CNAME 解析到 OCI 对象存储

法兰克福 endpoint : objectstorage.eu-frankfurt-1.oraclecloud.com

其他参考region参考:Oracle Cloud Infrastructure API Reference and Endpoints

3.3 添加 Workers 服务

选用HTTP处理程序

3.4 编写处理请求服务代码

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  // url.host = 'YOUR_OBJECT_STORAGE_BUCKET_ENDPOINT' // OCI 对象存储 endpoint
  url.host = 'objectstorage.eu-frankfurt-1.oraclecloud.com'  // 使用法兰克福节点
  const newRequest = new Request(url, request)
  return fetch(newRequest)
}

3.5 配置站点缓存页面规则

示例中规则是对s3.xxx-xxx.com域名下的所有内容进行缓存

3.6 配置站点的路由规则

配置当前CDN域名 到 指定的路由规则

4 通过CDN域名访问对象存储

格式:
https://<域名>/n/<namespace>/b/<bucket>/o/<文件名>

示例 - 普通模式:
https://s3.xxx-xxx.com/n/<对象存储namespace>/b/bucket-20230418-1654/o/achicken.jpg

示例 - Pre-Authenticated模式:
https://s3.xxx-xxx.com/p/b5B0q4auDc_g8u-Bk9taoLGZox94GsUfAnz-CSe9dCKRxAW8H5IkpRWoDRlSOUze/n/<对象存储namespace>/b/bucket-20230419-1036/o/chicken.jpg

5 通过 CloudFlare worker 替换 content-type 类型

5.1 背景

通过 SDK ( upload_obj ) 上传至对象存储的文件,如果不指定 content-type 默认会被指定为 octet-stream;目前已知此 content-type 类型会导致前端矢量图(.svg后缀)的展示失效,并且 oci 对象存储不支持自适应。

5.2 解决方式

客户目前正在使用cloudFlare进行缓存,通过 CloudFlare worker 实现对 svg 后缀文件的 content-type 进行替换,统一替换为image/svg+xml。

5.3 替换

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  // const response = await fetch(request)

  const url = new URL(request.url)  
  url.host = '<对象存储namespace>.compat.objectstorage.eu-frankfurt-1.oraclecloud.com'
  const newRequest = new Request(url, request)

  // 发起实际请求
  const response = await fetch(newRequest)
  // 获取请求路径
  const path = url.pathname
   // 检查文件后缀是否为 '.svg'
   if (path.endsWith('.svg')) {
    // 修改内容类型为 'image/svg+xml'
    const modifiedHeaders = new Headers(response.headers)
    modifiedHeaders.set('Content-Type', 'image/svg+xml')

    // 返回经过修改的响应
    return new Response(response.body, {
      status: response.status,
      statusText: response.statusText,
      headers: modifiedHeaders
    })
  }
 // 直接返回原始响应
 return response
}

6 参考

Oracle Cloud Infrastructure API Reference and Endpoints

🚀 炸鸡物料库 🚀

🔍 内容定位: IT技术领域,云计算、云原生、DevOps 和 AI 等相关的技术资讯、实践和经验分享。面向开发、系统和云计算,提供实用的技术内容。

🎯 目标受众: 面向开发者、系统管理员和云计算从业者,提供实用的技术内容。

🗓️ 更新频率:每周更新,每次分享都为您带来有价值的技术内容。

🤝 互动与反馈: 鼓励读者留言、评论,有问题随时提问,我们将积极互动并提供帮助。

💌 订阅方式: 扫描二维码或搜索“炸鸡物料库”关注,不错过每一篇精彩内容。

🌐 合作与分享: 如果您有技术分享或合作计划,欢迎联系我们,共同成长!

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值