使用http_auth来加密文章

有些内容是不方便公开的,除了使用hugo的加密插件外,还可以使用nginx自带的加密功能来保护文章。
nginx的http验证他具有简单,通用的特点,但hugo的文章加密可以在单个文章中,自定义要加密的部分,而且可以在类似cloudflare pages 这种平台使用。

创建要加密的页面

进入你的网站的content文件夹,创建一个文件夹,名字随意,这里我使用encrypted这个名称。
创建完成后,就可以在里面新建不想被看到的文章了,可以用这个命令创建文章,或者也可以从post里面移动一些到这里。

1
hugo new /encrypted/Article1.md

如果需要在网站上显示直达入口的话,需要添加一个菜单到页面上。
这里可能需要根据使用的主题,按照配置文件的模板去添加配置。
已我使用的stac主题为例,打开网站的config.yaml,在自定义菜单部分输入以下内容。

1
2
3
4
5
6
7
8
menu:
    main:
        - identifier: encrypted
          name: 私密文章
          url: /encrypted
          weight: -50
          params:
            newTab: true

完成后,生成网站并上传到vps。

nginx的配置

  1. 打开/etc/nginx/nginx.conf,查看user字段,这可以了解nginx是在哪个用户下运行的。
  2. 这里将在/etc/nginx目录创建auth目录,属于nginx用户,权限700,输入以下命令。
1
mkdir /etc/nginx/auth &&c chown -R nginx /etc/nginx/auth ……&& chmod 700 /etc/nginx/auth
  1. 在刚刚创建的auth目录,输入以下命令创建密钥。
1
openssl passwd -1>>nginx_auth

接下来,根据提示设置密码,完成后,打开刚刚创建好的文件,在文本开头输入你需要的用户名然后输入:,然后保存文件。

  1. 给密钥文件指定用户和权限,输入以下命令设置。
1
chown nginx /etc/nginx/auth/nginx_auth
  1. 修改你的网站配置文件,在server的配置下面加入以下内容。
1
2
3
4
location /encrypted/ {
auth_basic           "Private zone";
auth_basic_user_file /etc/nginx/auth/nginx_auth;
}

修改完成后,重启nginx即可生效。
为了让加密真正有用,需要给网站开启https,否则传输的用户信息是铭文的。
此时只要访问私密文章目录,就需要输入用户名和密码。

Licensed under CC BY-NC-SA 4.0