Nginx增加密码验证

在设置网络服务器时,往往希望限制访问网站的某些部分路径,网络应用程序通常会提供自己的身份验证和授权方法,其实网络服务自身也可以提供简单的限制

创建Password文件

首先,需要创建保存用户名和密码组合的文件,可以使用服务器上安装的openssl工具来完成,

  • 使用OpenSSL 工具创建Password文件
  • 使用下面命令添加用户sammy/etc/nginx/.htpasswd文件

    1
    2
    3
    $ sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"
    $ cat /etc/nginx/.htpasswd
    sammy:%
  • 使用下面命令为用户sammy增加加密过的密码

    1
    2
    3
    $ sudo sh -c "openssl passwd thisispasswd >> /etc/nginx/.htpasswd"
    $ cat /etc/nginx/.htpasswd
    sammy:$1$D6mrQnl4$HL5pVWmlatOoFw.bez3.s0

你可以重复此过程添加更多的用户名和密码

  • 输入下面命令查看/etc/nginx/.htpasswd文件,理解用户名和加密的密码如何存储的
    1
    2
    $ cat /etc/nginx/.htpasswd
    sammy:$1$D6mrQnl4$HL5pVWmlatOoFw.bez3.s0

配置Nginx的密码验证

现在,我们有了一个包含用户名和密码的文件。我们需要配置Nginx在提供受保护路径内容之前检查该文件.首先打开要添加限制的服务器块配置文件,在我们的示例中,将使用默认服务器块文件:

1
$ sudo vim /etc/nginx/sites-enabled/default

文件内容应该与下面内容类似

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

server_name localhost;

location / {
try_files $uri $uri/ =404;
}
}

使用auth_basic指令打开身份验证,使用auth_basic_user_file指令将Nginx指向我们创建的用户密码文件,下面是增加用户名密码校验的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

server_name localhost;

location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}

完成后保存并关闭文件,重启Nginx

1
$ sudo service nginx restart

确认用户名密码认证

Nginx Authentication Required


Nginx增加密码验证
https://blog.chyidl.com/2024/01/30/password-authentication-with-nginx/
作者
Yaqing Chyi
发布于
2024年1月30日
许可协议