CDN CloudFlare 接入 OCI 对象存储

在当今数字化时代,网站性能和可用性是业务成功的关键。为了提供快速且可靠的访问体验,许多组织正在寻找有效的内容分发网络(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 对象存储 endpointurl.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 等相关的技术资讯、实践和经验分享。面向开发、系统和云计算,提供实用的技术内容。

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取秒值, 把秒值转换为时分秒, 及把时分秒转换成秒值代码

// author: hjjdebug // date: 2024年 03月 01日 星期五 15:29:32 CST // description: 获取秒值, 把秒值转换为时分秒, 及把时分秒转换成秒值 // 使用就这么简单. // 有时候程序输出需要打印时间信息, 就可以这么干了. /// #include <stdio.h> #include <time.h> …

tvm编译爬坑,包括rpc

环境 docker ubuntu20.04 主要参考&#xff1a; TVM的安装编译 - 知乎 其他还参考&#xff1a; https://www.cnblogs.com/whiteBear/p/16629669.html 用TVM在Android上部署模型 (II. Docker安装TVM环境) - 知乎 对 APK 进行手动签名 - Xamarin | Microsoft Learn Android …

《PyTorch深度学习实践》第十二讲循环神经网络基础

一、RNN简介 1、RNN网络最大的特点就是可以处理序列特征&#xff0c;就是我们的一组动态特征。比如&#xff0c;我们可以通过将前三天每天的特征&#xff08;是否下雨&#xff0c;是否有太阳等&#xff09;输入到网络&#xff0c;从而来预测第四天的天气。 我们可以看RN…

Python实现双向链表:从基础到应用

一、引言 双向链表是一种比单向链表更复杂的数据结构&#xff0c;每个节点除了包含数据和指向下一个节点的指针外&#xff0c;还包含一个指向前一个节点的指针。这种结构使得我们可以从链表的任何节点开始&#xff0c;向前或向后遍历链表。 目录 一、引言 二、节点定义 三、…

OPPO打响AI手机第一枪

明敏 发自 凹非寺 量子位 | 公众号 QbitAI 2024开年&#xff0c;AI趋势依旧高歌猛进。 一边&#xff0c;Sora爆火成为现象级AIGC应用&#xff0c;带动AI再度成为春节后全民热议的第一话题。另一边&#xff0c;手机厂商开始大举All in AI&#xff0c;“放弃传统智能手机”、“…

【Qt】Sqlite数据库加密

1. 加密方式 对数据库文件加密。既不会暴露表结构&#xff0c;也不会暴露数据细节。 2. 加密工具&#xff08;QtCipherSqlitePlugin&#xff09; 用于密码 SQLite 的 Qt 插件&#xff0c;它基于 SQLite 源和 wxWidget 中的 wxSQLite3插件github地址&#xff1a;https://gith…

gpt-3.5-turbo与星火认知大模型v3.5回答对比

创建kernel // Create a kernel with OpenAI chat completionKernel kernel Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId:"使用的模型id" ,apiKey: "APIKey").Build();使用讯飞星火认知大模型的话&#xff0c;可以参考我这一篇文章&#xff…

突破编程_C++_高级教程(正则表达式)

1 正则表达式的概念 正则表达式&#xff0c;又称规则表达式&#xff0c;&#xff08;Regular Expression&#xff0c;在代码中常简写为 regex 、regexp 或 RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&a…

c++函数指针 回调函数

目录 函数指针 ​编辑 实例 函数指针作为某个函数的参数 实例 std::function轻松实现回调函数 绑定一个函数 作为回调函数 作为函数入参 函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量&#xff0c;而函数指针是指向…

证券相关业务知识

证券相关业务知识 LOF交易回售业务触发条件 股票代码区分融券专户竞价交易与大宗交易一级市场和二级市场ETF交易融资融券交易&#xff08;两融&#xff09;融券强平转托管簿记和预簿记期权权证股票板块 LOF交易 LOF&#xff0c;即上市型开放式基金&#xff08;Listed Open-End…

【Java】UWB高精度工业定位系统项目源代码

目录 UWB技术原理 优势 1. 高精度&#xff1a; 2. 抗干扰能力强&#xff1a; 3. 定位范围广&#xff1a; 4. 实时性强&#xff1a; 应用前景 定位系统源码功能介绍 实时定位&#xff1a; 轨迹回放&#xff1a; 区域管理&#xff1a; 巡检管理: 数据可视化分析&…

BAT等大厂必问技术面试题,2024Android开发面试解答之设计模式

IT行业薪水高&#xff0c;这是众所周知的&#xff0c;所以很多人大学都选择IT相关专业&#xff0c;即使非该专业的人&#xff0c;毕业了也想去一个培训机构镀镀金&#xff0c;进入这一行业。 但是有关这个行业35岁就退休的说法&#xff0c;也一直盛传。 加上这几年不断有各大…

回溯 Leetcode 47 全排列II

全排列II 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 Leetcode 47 学习记录自代码随想录 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff1a; 输入&#xff1…

Unity3d Shader篇(十)— 渐变纹理

文章目录 前言一、什么是Unlity渐变纹理Shader&#xff1f;1. 渐变纹理Shader工作原理2. 渐变纹理&#xff1f;3. 渐变纹理的优缺点优点&#xff1a;缺点&#xff1a; 4. 渐变纹理例图 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函…

Linux下的GDB

1.前言 GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c程序员&#xff0c;GDB是必不可少的工具 2.GDB使用帮助 GDB命令拥有较多内部命令。在gdb命令提示符下输入help可以查看所有内部命令及使用说明 …

Mediapipe笔记:安装Mediapipe+手部检测+动作识别

Mediapipe 安装Mediapipe 打开Anaconda prompt检查环境和python运行环境是否一致(默认base环境&#xff0c;不用切换)输入命令行pip install mediapipe0.9.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple Mediapope完成手部关键点检测 手部检测 创建对象(加载模型参数)…

(二十二)devops持续集成开发——jenkins服务代理Agent搭建

前言 在Jenkins 中&#xff0c;代理&#xff08;Agent&#xff09;是一种用于执行构建、部署和其他任务的计算节点。代理节点可以是物理机器、虚拟机或容器&#xff0c;它们负责接收 Jenkins 主控节点委派的任务并执行这些任务。通过使用代理节点&#xff0c;可以有效地分担Je…

Redis内存淘汰策略详解

Redis作为一个高性能的键值对数据库&#xff0c;被广泛应用于各种需要快速响应和持久存储的场景中。然而&#xff0c;由于其内存存储的特性&#xff0c;当Redis的内存使用达到其最大配置限制时&#xff0c;就需要有一种策略来管理内存的使用&#xff0c;以避免内存溢出。这就是…

NLP Seq2Seq模型

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/mi…

深入理解Linux线程(LWP):概念、结构与实现机制(2)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;会いたい—Naomile 1:12━━━━━━️&#x1f49f;──────── 4:59 &#x1f504; ◀️ ⏸ ▶️ ☰ &a…