NGINX系列(八) NGINX基本身份认证

1
2
3
4
5
6
7
作者:李晓辉

联系方式:

1. 微信:Lxh_Chat

2. 邮箱:939958092@qq.com

环境介绍

操作系统IP地址主机名NGINX版本角色
Rocky9.4192.168.8.3loadbalance.xiaohui.cn1.26.2负载均衡

基本身份认证概念

引言

在当今数字时代,网络安全和数据隐私变得越来越重要。无论是个人博客、企业网站还是电商平台,保护用户信息和防止未经授权的访问都是至关重要的。在这种背景下,NGINX 作为一种高性能的 Web 服务器,广泛应用于各种类型的网站和应用程序中。NGINX 不仅具备出色的性能和可扩展性,还提供了一系列强大的安全功能,其中之一便是基本身份认证(Basic Authentication)。

基本身份认证是一种简单而有效的方式,用于在用户访问受保护的资源之前进行身份验证。通过这种方式,网站能够确保只有授权用户才能访问特定内容,从而提高安全性。在这篇博客中,我们将深入探讨 NGINX 的基本身份认证,包括其工作原理、配置方法以及如何在实际应用中使用这一功能。

工作原理

基本身份认证(Basic Authentication)是一种简单而有效的用户验证方法,广泛应用于 Web 服务器中。其工作原理如下:

  1. 客户端请求访问受保护资源

当客户端(例如浏览器)请求访问受保护的资源时,服务器会检查该资源是否需要身份认证。如果需要,服务器会返回一个带有状态码 401 Unauthorized 的响应,并在响应头中包含 WWW-Authenticate 字段,指示客户端需要提供用户名和密码。

  1. 客户端提供凭据

客户端收到 401 Unauthorized 响应后,会弹出一个对话框,要求用户输入用户名和密码。用户输入凭据后,客户端会将这些信息编码成 Base64 格式,并在后续请求中包含一个 Authorization 请求头。

  1. 服务器验证凭据

服务器收到带有 Authorization 头的请求后,会解码 Base64 字符串,获取用户名和密码。然后,服务器会将这些凭据与其存储的用户认证信息进行比较(例如存储在 .htpasswd 文件中)。如果凭据匹配,则服务器会允许访问受保护资源,并返回正常的 HTTP 响应(如 200 OK)。

  1. 返回受保护内容

如果凭据验证成功,服务器将返回请求的受保护内容。

基本身份认证实战案例

创建用户密码文件

我们这里用到htpasswd命令来生成用户名和密码,所以需要安装httpd-tools

1
yum install httpd-tools -y

创建了用户认证文件,并添加了两个用户 lixiaohuizhangsan,他们的密码都是 123456。这些凭据已存储在 /etc/nginx/conf.d/htpasswd 文件中。

1
2
3
4
[root@loadbalance ~]# htpasswd -b -c /etc/nginx/conf.d/htpasswd lixiaohui 123456
Adding password for user lixiaohui
[root@loadbalance ~]# htpasswd -b /etc/nginx/conf.d/htpasswd zhangsan 123456
Adding password for user zhangsan

看看密码

1
2
3
[root@loadbalance ~]# cat /etc/nginx/conf.d/htpasswd
lixiaohui:$apr1$b4ZJf158$tuYNS8dZUpcHtx0TzfDQb.
zhangsan:$apr1$YUpHTRch$6M.UyewvdZZG6.GyfcOOa1

配置基本认证

本例中,打开loadbalance.xiaohui.cn时,将会弹窗需要认证,标题为please auth first,使用的密码文件为/etc/nginx/conf.d/htpasswd

1
2
3
4
5
6
7
8
9
10
11
12
13
cat > /etc/nginx/conf.d/auth.conf <<EOF
server {
listen 80 default_server;
server_name loadbalance.xiaohui.cn;

location / {
auth_basic "please auth first";
auth_basic_user_file /etc/nginx/conf.d/htpasswd; # 指定用户认证文件路径
root /usr/share/nginx/html;
index index.html index.htm;
}
}
EOF

测试认证效果

发现需要认证才可以访问

1
2
3
4
5
6
7
8
9
[root@loadbalance ~]# curl http://loadbalance.xiaohui.cn/index.html
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.26.2</center>
</body>
</html>
[root@loadbalance ~]#

如果你用浏览器打开,会有一个弹框让你输入密码

浏览器中输入: http://192.168.8.3 弹框如下:

nginx-auth-pop

带上账号密码访问就可以成功

1
2
3
4
5
6
7
8
9
10
11
12
[root@loadbalance ~]# curl --user lixiaohui:123456 http://loadbalance.xiaohui.cn
hello world
[root@loadbalance ~]# curl -I --user lixiaohui:123456 http://loadbalance.xiaohui.cn
HTTP/1.1 200 OK
Server: nginx/1.26.2
Date: Mon, 20 Jan 2025 06:12:15 GMT
Content-Type: text/html
Content-Length: 12
Last-Modified: Mon, 20 Jan 2025 06:11:49 GMT
Connection: keep-alive
ETag: "678de925-c"
Accept-Ranges: bytes

文章总结

通过本文的详细讲解,我们深入了解了 NGINX 的基本身份认证机制,从其工作原理到具体的配置方法都进行了全面解析。基本身份认证为保护 Web 资源提供了一种简单而有效的手段,确保只有经过授权的用户才能访问特定内容。我们探讨了如何创建和配置用户认证文件,并通过实际示例展示了在 NGINX 中启用身份认证的步骤。

基本身份认证虽然易于实现,但由于凭据以 Base64 编码形式传输,并没有加密,因此在实际应用中建议结合 HTTPS 使用,以确保传输过程中的数据安全。如果你对 Web 安全有更高的需求,还可以考虑其他更复杂的认证方式,如双重认证、基于令牌的认证等。

希望通过这篇博客,你能更好地理解和应用 NGINX 的基本身份认证,提高你的网站安全性。如果你有任何问题或需要进一步的帮助,欢迎随时与我交流。保护你的 Web 资源,让每一次访问都更加安全可信!