目前博客是部署到了Github Pages
上,具体实现见博客架构说明。
缘由
Github Pages
部署有一个问题,就是不支持HSTS
。
HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过 HTTPS 访问当前资源,而不是HTTP。
虽然Github Pages
提供了Enforce HTTPS
的选项,开启后http
请求会301跳转到https
请求。
但是因为返回包缺少Strict-Transport-Security
的Header头,导致HSTS校验失败。
为了彻底支持HSTS
,决定切换到Cloudflare Pages
。
部署
Cloudflare Pages
部署非常简单,授权Github
仓库权限,配置好分支即可,这里不多介绍。
在Github Pages
上,code
分支保存原始文件,master
分支保存hugo
构建后的文件。
Cloudflare Pages
这里生成分支选择master
,同时禁用其他分支的自动构建。
这样提交代码后,github actions
构建文件提交到master
分支,然后触发Cloudflare Pages
部署。
这里为什么没有采用Cloudflare Pages
的自动构建呢?因为很慢,构建一次要3分钟左右。
采用拉取master
构建好的文件的话,只需要7秒左右。
补齐Header头
部署好后,Cloudflare Pages
的返回也是没有Strict-Transport-Security
Header头的。
这里需要通过自定义Header头实现,增加_headers
文件,内容如下:
/*
strict-transport-security: max-age=31536000; includeSubDomains; preload
至此HSTS
搞定。