Vigorous Pro

The world can always use more heroes.

  1. 1. 生成认证文件
    1. 1.1. 方式一:通过 openssl 生成
    2. 1.2. 方式二:使用Apache 工具生成
  2. 2. 修改 Nginx 配置文件
    1. 2.1. 参考文章

本文将介绍如何为网站启用HTTP基本认证,来保护我们的一些网站页面。

生成认证文件

.htpasswd 是用于创建和更新用于存储用户名和密码的文件,以便对 HTTP 用户进行基本身份验证。

也就是说进行用户认证的信息都将会存储在 .htpasswd 文件中(使用 Nginx 时,虽可以将文件保存成其他名称,但文件的本质时相同的)。
创建这个文件可以通过下方的两种方法进行。

方式一:通过 openssl 生成

echo "username:$(openssl passwd -crypt 'password')" >> /home/.htpasswd

CRYPT
仅限 Unix 。使用传统的Unix crypt(3)函数,随机生成32位盐(仅使用12位)和密码的前8个字符(即:密码最多仅支持8位,超过八位将仅保留前八位)。不安全。

printf "${username}:`openssl passwd -apr1`\n" >> .htpasswd

MD5
$ apr1 $ +特定于 Apache 的算法的结果,使用随机32位盐和密码的各种组合的迭代(1,000次)MD5摘要。

方式二:使用Apache 工具生成

此方法需要安装 Apache 工具 Debian/Ubuntu 用户需要安装 apache2-utils ,RHEL/CentOS/Oracle Linux 系统则需要安装httpd-tools

//For Debian/Ubuntu
apt install apache2-utils

//For RHEL/CentOS/Oracle Linux
yum install httpd-tools

创建密码文件和第一个用户。

htpasswd -c /home/.htpasswd user1

通过 htpasswd -c 命令来生成 .htpasswd 文件, /home/.htpasswd 为用户认证文件路径, user1 则为认证用户的用户名,点击回车后将会要求您为用户设置密码。

通过下方的命令来添加新用户,需要确保文件路径相同。

htpasswd /home/.htpasswd user2

确认该文件中包含用户名和加密密码( 猫一下( ̄y▽, ̄)╭

cat /home/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

正常情况下,不会出现问题。下面我们来配置 Nginx 。

修改 Nginx 配置文件

在 conf 文件中加入此配置,即可使用基本身份验证限制对整个网站的访问。

auth_basic "Administrator’s Area";
auth_basic_user_file /home/.htpasswd;

但是如果我想要保持某个部分可以直接访问呢?在这种情况下,通过添加 auth_basic off 参数来指定取消继承自上级配置级别的基本身份验证限制:

server {
    ...
    auth_basic           "Administrator’s Area";
    auth_basic_user_file conf/htpasswd;

    location /public/ {
        auth_basic off;
    }
}

此时, public 目录即可直接访问,而其他目录则需要验证。
也可以反过来,仅对特定目录使用基本身份验证

location /api {
    auth_basic           “Administrator’s Area”;
    auth_basic_user_file /etc/apache2/.htpasswd; 
}

甚至可以更进一步,限制/仅允许特定的ip进行访问

location /api {
    #...
    deny  192.168.1.2;
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny  all;
}

配置完成后,重新加载 Nginx 配置文件

nginx -s reload

现在我们便成功的为网站启用了 HTTP 基本认证。

当用户输入了错误的用户名或密码时,Nginx会返回401 Authorization Required禁止访问。

参考文章

本文作者 : Edison Jwa
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.wevg.org/archives/nginx-http-basic-auth/

本文最后更新于 天前,文中所描述的信息可能已发生改变