nginx基本身份认证


1 环境介绍

操作系统 IP地址 主机名 NGINX版本 角色
Rocky9.6 192.168.8.4 loadbalance.luovip.cn 1.26.2 负载均衡

2 基本身份认证概念

2.1 引言

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

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

2.2 工作原理

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

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

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

  2.客户端提供凭据

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

  3.服务器验证凭据

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

  4.返回受保护内容

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

3 基本身份认证实战

3.1 创建用户密码文件

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

[root@loadbalance ~]# yum install httpd-tools -y

# 创建了用户认证文件,并添加了两个用户 wangda 和 zhangyu,他们的密码都是 123456。这些凭据已存储在 /etc/nginx/conf.d/htpasswd 文件中。
[root@loadbalance ~]# htpasswd -b -c /etc/nginx/conf.d/htpasswd wangda 123456
Adding password for user wangda

[root@loadbalance ~]# htpasswd -b /etc/nginx/conf.d/htpasswd zhangyu 123456
Adding password for user zhangyu

# 查看密码
[root@loadbalance ~]# cat /etc/nginx/conf.d/htpasswd
wangda:$apr1$0.CsW05j$3Zj71ol8BonDADLQpnOBD1
zhangyu:$apr1$l4fiIaRn$Ezac4EVB82Gq0mhTaFDVX0

3.2 配置基本认证

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

cat > /etc/nginx/conf.d/auth.conf <<EOF
server {
    listen 80 default_server;
    server_name loadbalance.luovip.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

# 重载NGINX
[root@loadbalance ~]# nginx -s reload

3.3 测试认证效果

  发现需要认证才可以访问

[root@loadbalance ~]# curl http://loadbalance.luovip.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>

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

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

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

[root@loadbalance ~]# curl --user wangda:123456 http://loadbalance.luovip.cn
Hello nginx,I'm China

[root@loadbalance ~]# curl --user zhangyu:123456 http://loadbalance.luovip.cn
Hello nginx,I'm China

[root@loadbalance ~]# curl -I --user wangda:123456 http://loadbalance.luovip.cn
HTTP/1.1 200 OK
Server: nginx/1.26.2
Date: Sun, 12 Oct 2025 04:36:33 GMT
Content-Type: text/html
Content-Length: 22
Last-Modified: Thu, 25 Sep 2025 07:31:58 GMT
Connection: keep-alive
ETag: "68d4efee-16"
Accept-Ranges: bytes

4 总结

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

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

  通过这篇博客能更好地理解和应用 NGINX 的基本身份认证,提高网站安全性。


文章作者: 罗宇
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 罗宇 !
  目录