OSS + CDN 如何部署前端静态资源

2,014 阅读5分钟

OSS 对象存储

对象存储就是图片、音频、视频等非结构化数据的数据池。

我们可以把它理解为商场的存包服务,顾客将包(数据)交给服务员(API接口),服务员给顾客一个凭证(对象地址URL),顾客想要取包时,只需提供凭证,不需要知道自己的包到底是以什么形式存储在哪里,省时省心省力。

对象存储适用于存储文档、图片、视频等非结构化数据,并且它让数据使用也更加方便。

以前,我需要使用某个资源,只能把这个资源拷贝到U盘等容器中,然后带着U盘导出拷贝。

当我突然要使用时,还必须要随身携带U盘,这非常不方便。

现在有了对象存储之后,我可以把资源存放在某个地方,会得到一个链接地址,在需要的时候只需要使用浏览器进行访问即可。非常方便。

CDN 内容分发网络

网络把几乎全世界的计算机都连接了起来,只需要把静态资源和动态的代码部署到服务器上,启动服务监听某个端口,这样世界各地的计算机就都能访问该网站。

但是这样有个问题,资源最终还是通过物理层网络线路和设备传输的,每经过一段线路、一个网络设备都有一些耗时,所以客户端和服务器相距越远,网站打开速度就越慢。

这样用户体验会很差。怎么解决这个问题呢?

离得越远网站打开速度就越慢,很容易想到,如果部署到很多个地方,当用户访问网络的时候,访问最近的那个不就行了?

这就像快递都有一些中转的仓库,可以存放一些货物,如果你人在北京,要买一个海南的东西,恰好北京的仓库里有,那岂不是很快就可以收到了。

这就是 CDN 内容分发网络的作用。

部署

单页应用

单页应用(single-page application,SPA)是一种网络应用程序或网站的模型,它通过动态重写当前页面与用户进行交互,而非传统的从服务器重新加载整个新页面。这种方法避免了页面之间切换打断用户体验,使应用程序更像一个桌面应用程序。

在单页应用中,所有必要的代码(HTML、JavaScript 和 CSS)都通过单个页面的加载而检索,或者根据需要(通常是为响应用户操作)动态装载适当的资源并添加到页面。

下面使用腾讯云对象存储(Cloud Object Storage,COS) 提供的静态网站功能快速搭建一个线上可用的单页应用,并提供一些常见问题的解决方案。

示例代码如下:

// App.vue
<template>
  <div>
    <ul>
      <li><RouterLink to="/">home</RouterLink></li>
      <li><RouterLink to="/my">my</RouterLink></li>
    </ul>
    <router-view></router-view>
  </div>
</template>

// router.js
import { createRouter, createWebHistory } from 'vue-router'

import Home from './views/Home.vue'
import My from './views/My.vue'

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/home',
    component: Home
  },
  {
    path: '/my',
    component: My
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router

静态资源上传到OSS上

  1. 首先需要开通OSS服务;

  2. 创建存储桶,设置公有读私有写;

image.png

  1. 把前端静态资源手动或者通过API的形式上传到存储中

  2. 静态网站配置

image.png

索引文档:当你访问www.xxx.com的时候就实际上就去加载index.html,这样显得域名更加简洁。

错误文档:如果用户访问了一个不存在的资源,这个时候你可以指向一个404.html页面进行提示,这样更加友好。

对于单页应用,错误文档这里必须设置为入口文件index.html,这样当访问一个不存在的路由的时候仍然返回index.html,这样就满足了单页应用的要求。

错误文档响应码:当访问一个不存在的路由的时候一般错误码返回404,但是对于单页应用,我们必须设置为200

经过上面的配置,你访问页面后,尝试切换路由(Home、My),并刷新页面,都是符合预期,即在路由下刷新不会出现404报错,这是因为不管请求什么路径,都是返回一个入口文件index.html

重定向:当访问某个路由的时候就会重定向到另一个路由上,比如我们一般在浏览器中直接输入www.abc.com,一般需要重定向到www.abc.com/

image.png

  1. 自定义域名

这里有个非常关键的点,因为我们开启了静态网站功能,所以在配置域名的时候一定要选择静态网站源站

image.png

配置CDN

  1. 添加域名

image.png

image.png

加速域名:这个就是你要加速的域名,比如:blog.junren.com

源站配置:你的静态资源放在那里,这里因为静态资源放在OSS上(腾讯云叫COS),所以选择COS。

回源协议:指CDN节点回源站请求资源时使用的协议,为了安全一般都是选择HTTPS。

  1. 配置CNAME:把域名指向CND的服务器域名

image.png

  1. 申请SSL正式

image.png

  1. 给域名绑定证书,注意也包括CND域名也要绑定证书

域名解析

如果你的域名和服务器在同一个厂家买的话,在CND配置那里有一步是一键配置CNAME,它就会自动帮你进行域名解析,即把域名和CND域名进行绑定。

如果不是,就需要手动配置CNAME,把域名和CDN域名进行绑定。

image.png