个人需求:
1、在国内低延迟访问
2、不希望部署额外的服务器
3、域名已在百度云备案,不打算迁移备案
4、能实现需求:强制https访问(http跳转到https),www域名访问跳转到不带www域名
5、不能通过其他域名访问网站,避免SEO问题
因为网站备案在百度,之前百度有bae基础版,花费很少,后来取消了,维护网站成本变高。
阿里云有一台服务器,本来想迁过去的,但是没有在阿里云备案,百度的备案和阿里云的备案又是不相连的,后面我的解决方法是将网站部署在海外的服务器上,通过cdn回源+缓存解决。
CDN有缓存的时候,速度很快,但是第一次回源非常慢,到了难以忍受的程度。
于是就衍生了 百度云CDN + 阿里云OSS 这个托管网站的方案
为什么不直接在百度云对象存储BOS里静态托管网站呢?
百度云BOS自身有一些问题,一是百度云BOS自带的二级域名不能屏蔽,二是通过CDN域名访问BOS,静态网站托管会失效,无法显示索引页。
于是选择在阿里云OSS上托管网网站,然后百度云CDN回源,实现网站托管。
操作方法
1、阿里云OSS的Bucket设置
1、设置为公开读
2、防盗链Refer设置为任意一个域名 *.xxxx.com,不允许空Referer
2、百度云CDN设置
1、回源域名 xxx.oss-cn-hangzhou.aliyuncs.com
2、节点到源站request: Referer 设置为 *.xxxx.com
3、节点到端response: Content-Disposition 设置为 inline
这样当直接访问阿里云OSS域名时,会提示AccessDeny, You are denied by bucket referer policy.,实现只能通过百度云CDN域名访问。
3、www跳转不带www域名
百度云上线了EdgeJS边缘服务,可以使用EdgeJS来返回302状态码,跳转至不带www域名,使www域名不回源实现serverless。
1 | // 302 redirect |
4、额外的
1、事实上,百度云的EdgeJS边缘服务,可以通过适量的编程来实现静态网站托管失效的问题
2、在MacOS系统中初次建立ssl连接的时,会出initial connection时间过长的问题,可能是let’s encrypt证书导致