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.pswp.cn/news/711946.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711946.shtml
英文地址,請注明出處:http://en.pswp.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…