摘要訊息 : 在 Nginx 下打開 HTTP 使用者認證.

0. 前言

某些网页只想给特定的人看的话, 又没有能力或者不想自行设计用户系统的话, 使用 HTTP 认证就是一个很好的选择.

本文在 2022 年 1 月 21 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. 配置

首先创建 HTTP 认证专用的文件夹用于保存 HTTP 认证所需要的账号密码文件 : mkdir /etc/nginx/htpasswd, 然后通过指令 printf "用户名:$(openssl passwd -crypt 密码)\n" >> /etc/nginx/htpasswd/用于存储的文件名 (例如 printf "httpauth:$(openssl passwd -crypt password)\n" >> /etc/nginx/htpasswd/auth). 这里密码要特别注意的是, 密码不能超过8位, 否则就会被截断并且出现警告 :

Warning: truncating password to 8 characters

可以通过这个方式创建多个用户, 但是如果用户名重复, 只有第一个是有效的.

创建好文件之后, 只需要在 Nginx 配置下 location / {} 中添加如下代码即可实现 HTTP 认证 :

location / {
    #...添加下面两行
    auth_basic "阁下需要进行验证!";
    auth_basic_user_file /etc/nginx/htpasswd/用于存储的文件名;
    #...
}

配置修改完成之后需要使用指令 systemctl reload nginx 来重新载入 Nginx 配置档案. 之后打开相关的网站, 就会提示你输入用户名和密码 :

Figure 1. 网页验证

需要注意的是, 我们在 auth_basic "阁下需要进行验证!"; 中给出了提示, 但是 Safari 并不会给出这样的提示, 而 Chrome 会给出这样的提示.