使用Github的Pages来托管Hexo的网站,由于项目是公开的,因此网站的所有静态页面以及相关附件文档都可以在Github网站上被公开访问。
如果有些网站内容我们不希望公开,希望将这些静态页面进行加密,让访问者只能凭借密码进行访问,这样的需求可以通过Hexo的插件hexo-blog-encrypt来实现。
具体实施方案如下:
1. 安装插件
打开 Node.js command prompt,在控制台窗口中将路径定位到Hexo网站的目录,然后输入命令:
1 | npm install --save hexo-blog-encrypt |
2. 添加密码
为文章设置加密密码有两种方式,一种是在文章信息头当中添加,另一种是通过配置网站的_config.yml文件、根据Tag标签来批量加密(相关文章只允许使用唯一的Tag标签),其中前者的优先级更高。以下内容以第一种加密方式为例进行说明:
在网站目录下的source>_posts文件夹当中找到文章的MD源文件,使用文本编辑器打开以后可以找到类似以下内容的文章信息头:
1 | title: 对Hexo网站进行加密设置 |
在上述文件头信息中添加password字段就可以添加密码了,例如:
1 | title: 对Hexo网站进行加密设置 |
保存上述设置并发布文章以后,打开此文章的页面时,会提示用户输入密码,显示效果如下图:

输入密码并回车以后,就能显示完整的文章内容了。
此外,在网站首页的文章列表当中,也不会显示文章内容,而是显示以下的效果:

3. 修改提示
上面两个截图中所显示的文字提示信息,也可以通过设置文章信息头的方式自定义,例如设置成以下内容:
1 | title: 对Hexo网站进行加密设置 |
其中abstract指的就是首页当中显示的文章预览内容,可以设置成内容提要的形式;message指的就是文章页面当中的输入密码提示,也可以自定义。
4. Https设置
上述加密设置完成以后,发现在一些浏览器当中访问时输入密码后没有响应。经研究发现,要支持这样的加密设置,一方面需要比较新版的浏览器支持,另一方面需要将网站设置为Https站点,具体方法如下:
SSL证书
在阿里云上搜索并购买SSL证书,可以选择个人免费版(Symantec单域名)。
购买以后,根据提示操作,进行证书的申请,其中包括域名的绑定、域名验证方式(DNS验证或文件验证)、CSR生成方式可以选择系统生成。
申请的证书签发下来以后,因为站点是托管在Github上面的,因此证书不需要部署,只需要Github进行相关设置。
Github设置
在Github项目的Settings当中找到的Github Pages设置,在其中勾选强制HTTPS(Enforce HTTPS)选项,这样,访问网站时会强制使用Https方式。
上述两项设置完成之后,文章加解密功能就可以正常生效了。