一,什么是Nginx账户认证功能

Nginx 账户认证(HTTP Basic Auth)是 Nginx 自带的访问权限控制功能,通过用户名 + 密码验证,限制未授权用户访问网站内容。

二,功能

  1. 保护私密站点:防止未授权用户访问测试环境、后台管理、内部网站、私有文件。
  2. 简单安全防护:不用写代码,Nginx 直接实现登录弹窗验证,低成本提升安全。
  3. 权限访问控制:只允许指定账号访问,避免爬虫、陌生人随意访问服务器资源。
  4. 运维常用安全手段:常用于内网服务、监控平台、临时项目、敏感页面保护。

三,工作原理

  1. 用户访问网站 → Nginx 弹出账号密码登录框
  2. 用户输入账号密码 → Nginx 比对密码文件
  3. 验证通过 → 允许访问
  4. 验证失败 → 返回 401 拒绝访问

四,示例

1.首先创建认证用户与密码文件

htpasswd -cmb /usr/local/nginx/conf/.htpasswd admin lee
  • # -c:创建新的密码文件(仅第一次用)
  • # -m:使用 MD5 加密(兼容 Nginx)
  • # -b:非交互模式,直接在命令行传入密码
  • # admin:用户名
  • # lee:admin 用户的密码
htpasswd -mb /usr/local/nginx/conf/.htpasswd lee lee
  •  # 追加用户 lee,密码 lee
  • # 注意:这里不能再加 -c,否则会覆盖文件
cat /usr/local/nginx/conf/.htpasswd
admin:$apr1$haGCKgCT$myogggALmqNecTyNupsWQ/
lee:$apr1$H97AyQPF$kGU.Tc4zn1E4Zkp/M4R6G.
  • 这是 Nginx 支持的密码文件格式:用户名:加密后的密码
  • Nginx 会读取这个文件,验证访问者的账号密码

2.创建站点目录与测试文件

mkdir /webdata/nginx/timinglee.org/lee/login
echo login > /webdata/nginx/timinglee.org/lee/login/index.html
  • 创建目录 /webdata/nginx/timinglee.org/lee/login
  • 在目录下创建 index.html,内容为 login,用于访问测试

3.Nginx虚拟主机配置

server {
    listen 80;
    server_name lee.timinglee.org;

    location /login {
        root /webdata/nginx/timinglee.org/lee;
        index index.html;
        auth_basic "login password";
        auth_basic_user_file "/usr/local/nginx/conf/.htpasswd";
    }
}
  • listen 80:监听 80 端口(HTTP 默认端口)
  • server_name lee.timinglee.org:绑定域名 lee.timinglee.org
  • location /login:匹配访问路径 /login
  • root /webdata/nginx/timinglee.org/lee:站点根目录,访问 /login 时,Nginx 会查找/webdata/nginx/timinglee.org/lee/login/index.html
  • index index.html:默认首页文件
  • auth_basic "login password":开启 HTTP 基础认证,浏览器会弹出提示语 login password
  • auth_basic_user_file "/usr/local/nginx/conf/.htpasswd":指定密码文件路径,Nginx 会用这个文件验证账号密码

4.重载 Nginx 

# 先检查配置是否正确(避免 reload 失败)
nginx -t
# 重载配置,不中断服务
nginx -s reload

5.测试

五,总结

1.在验证的时候会碰到下面图片的问题

有图片可知

  • 账号密码认证是成功的(否则会返回 401 Unauthorized)
  • 请求已经到达你的 Nginx 服务器,但 /login/ 路径找不到对应的文件

2.解决方法

执行以下代码

nginx -t

我得到的结果

这说明:配置语法是正确的,可以正常启动 / 重载,但存在一个虚拟主机配置冲突。

把另一个配置文件删了即可解决问题

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐