Cloudflare Pages上的Hexo博客添加自定义响应头

AI 摘要
本文介绍了如何在静态博客托管平台配置响应头来提高网页安全性。作者首先列举了一些常用的托管平台,如GitHub Pages、Cloudflare Pages等。然后指出在Cloudflare Pages上配置响应头需要使用"_headers"文件,并提到了Hexo生成网页时会忽略以"_"开头的文件或文件夹的问题。最后,作者给出了解决方案,在Hexo的配置文件中使用"skip_render"和"include"配置项来跳过渲染和强行包含"_headers"文件。文章还详细介绍了如何在"_headers"文件中配置响应头的基本语法和示例。
警告
本文最后更新于 2023-02-08,文中内容可能已过时。

在上一篇博文 配置响应头 提高网页安全性 让跑分达到A+! 中,我简单介绍了一些能够提高安全性的响应头,但众所周知,静态博客基本上都是白嫖托管在各大平台上的,例如GitHub PagesCloudflare Pages腾讯云ServerlessVercelHerokuNetlify等。

在这种托管平台上,Headers响应头配置必须依靠平台本身提供的功能,例如GitHub的没有Vercel的Vercel.json、Netlify的自定义标头、Cloudflare Pages HeadersCloudflare Pages Headers

其他平台的自定义标头都是用gui或配置文件来定义的,而Cloudflare Pages与众不同,它要求设置一个_headers文件位于生成的网页根目录下

hexo在生成网页时会将source目录下的文件同步复制到生成的网页根目录下,所以将这个文件放在source里就好

但这个下划线就是个问题了,在Hexo文档中,有这么一句话:

Hexo ignores hidden files and files or folders whose names are prefixed with _ (underscore) - except the _posts folder.

Hexo会忽略以下划线开头的文件或文件夹(除了_posts

那么该怎么强行让Hexo在生成时将source目录下的_headers复制到站点根目录并跳过渲染?

skip_render配置项中填入_headers后,还需要使用include将该文件包含在生成时需要复制到根目录的列表里面

文档内并没有提供这类用法,但这个issue验证了该方法的可行性

_conifg.yml中按照以下用法填入即可

1
2
skip_render:
  - '_headers'
1
2
include:
  - '_headers'

这样就可以保证source目录下的_headers将会生成于网站根目录下

那该怎么配置这个文件?

基本语法如下:

1
2
[url]
  [name]: [value]

e.g.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/secure/page
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: no-referrer

/static/*
  Access-Control-Allow-Origin: *
  X-Robots-Tag: nosnippet

https://myproject.pages.dev/*
  X-Robots-Tag: noindex

删除响应头:

1
2
/*.jpg
  ! Content-Security-Policy

更多详细内容请查看Cloudflare Pages Headers

相关内容