使用 NGINX 实现 HTTP Basic 认证ngx_http_auth_basic_module 模块

一、前言

在 Web 应用中,对部分资源进行访问控制是十分常见的需求。除了基于 IP 限制、JWT 验证、子请求校验等方式外,最经典也最简单的一种方式便是 HTTP Basic Authentication。NGINX 提供的 ngx_http_auth_basic_module 模块支持基于用户名和密码的基本认证,搭配密码文件使用即可快速生效,适合临时保护内网站点、管理后台或演示环境。

本文将介绍该模块的基本原理、配置方式、安全注意事项,以及配套使用 htpasswd 工具生成密码文件的实践步骤。

二、模块简介

  • 模块名称ngx_http_auth_basic_module
  • 主要用途:限制资源访问,要求客户端输入用户名和密码进行认证
  • 认证方式:基于 HTTP 标准的 Basic 认证协议
  • 依赖文件:密码文件 htpasswd,包含加密后的用户名密码对

三、基本配置

示例:

location /admin/ {auth_basic "Admin Area";                 # 认证提示字符串(realm)auth_basic_user_file /etc/nginx/.htpasswd; # 密码文件路径
}

用户访问 /admin/ 时,将收到 401 提示,浏览器弹出认证对话框,需输入有效的用户名和密码才能访问。

四、指令详解

1. auth_basic

auth_basic "提示字符串" | off;
  • 启用 Basic 认证,并设置提示信息(如“Protected”)
  • 使用 off 可取消继承自上级的认证设置

2. auth_basic_user_file

auth_basic_user_file /路径/文件名;
  • 指定密码文件路径
  • 支持变量(如 $document_root)
  • 文件格式支持多种加密方案,详见下节

五、密码文件格式与生成

支持的密码格式包括:

  • crypt() 加密:传统 Unix 加密方式,兼容性强
  • MD5 (apr1):Apache 的变体,加密强度较高
  • SSHA / SHA:OpenLDAP/Dovecot 使用,但不推荐使用 SHA(无盐,易被彩虹表攻击)

推荐方式:使用 Apache 提供的 htpasswd 工具生成

安装:

Ubuntu / Debian:

sudo apt install apache2-utils

Mac(通过 Homebrew):

brew install httpd
创建密码文件:
# 创建新文件并添加用户
htpasswd -c /etc/nginx/.htpasswd admin# 添加其他用户(无需 -c)
htpasswd /etc/nginx/.htpasswd user2

执行后输入密码,文件内容示例:

admin:$apr1$Jz2Wx...$gDzVpzESXk3evm7aTnt1C1
user2:$apr1$T5bsw...$EOczxO2wqlfy5Iod5kZqf/

注:该文件权限建议设置为 640,并限制仅 NGINX 用户可读。

六、进阶用法

1. 结合 IP 限制:使用 satisfy 指令

location /internal/ {satisfy any;allow 192.168.0.0/24;deny all;auth_basic "Restricted";auth_basic_user_file /etc/nginx/.htpasswd;
}

上述配置表示:来自内网地址即可访问,其他请求必须通过 Basic 认证

2. 区块级控制:仅保护部分接口或目录

location /docs/private/ {auth_basic "Docs Login";auth_basic_user_file /etc/nginx/docs_passwd;
}

用于保护在线文档、临时演示页等。

七、安全注意事项

  • 认证信息为明文传输,强烈建议配合 HTTPS 使用
  • 密码文件中不可使用明文密码,需使用加密方式存储
  • 不推荐使用 {SHA},应优先使用 apr1bcrypt(OpenResty 用户可结合 Lua 模块)
  • 大量用户时,建议使用数据库认证方式或 JWT 替代 Basic Auth

八、总结

NGINX 的 ngx_http_auth_basic_module 提供了简单而高效的认证机制,尤其适用于中小型项目的访问控制、临时资源保护等场景。通过几行配置和一个 htpasswd 文件即可快速上线认证机制。结合 satisfy 实现复合控制,还可支持灵活的访问策略。

尽管 Basic Auth 存在加密弱点,但在内网或搭配 HTTPS 使用场景下,依旧是一个便捷的工具。掌握该模块,有助于你在各类 Web 项目中快速构建轻量级的访问控制体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

map和set的设计以及红黑树的设计

1.map和set的底层是红黑树 2.map和set在STL是容器&#xff0c;在我看来&#xff0c;不过也是封装了平衡二叉搜索树红黑树的适配器 我们先看红黑树的设计&#xff0c;看完后map和set的封装易如反掌 #pragma once #include<utility> #include<iostream> using name…

Linux运维——Vim技巧二

Vim技巧 一、管理多个文件1.1、用缓冲区列表管理打开的文件1.2、用参数列表将缓冲区分组1.3、将工作区切分成窗口1.4、用标签页将窗口分组1.5、用:edit命令打开文件1.6、使用:find打开文件1.7、把文件保存到不存在的目录中 二、动作命令在文档中移动2.1、区分实际行与屏幕行2.2…

2025 年 408 真题及答案

2025 年 408 真题 历年408真题及答案下载直通车 1、以下 C 代码的时间复杂度是多少&#xff1f;&#xff08;&#xff09; int count 0; for (int i0; i*i<n; i)for (int j0; j<i; j)count;A O(log2n)B O(n)C O(nlogn)D O(n2) 2、对于括号匹配问题&#xff0c;符号栈…

【MuJoCo仿真】开源SO100机械臂导入到仿真环境

主要参考&#xff1a;https://github.com/jpata/gym-so100/tree/integration/gym_so100/assets/trs_so_arm100 参考&#xff1a;&#xff08;八&#xff09;lerobot开源项目扩展so100的仿真操控&#xff08;操作记录&#xff09;_so100机械臂 仿真-CSDN博客 下载&#xff1a;…

Socat 用法详解:网络安全中的瑞士军刀

Socat 用法详解&#xff1a;网络安全中的强大工具 引言 socat&#xff08;SOcket CAT&#xff09;是一款功能强大的命令行工具&#xff0c;被誉为“网络瑞士军刀”&#xff0c;广泛应用于数据传输、端口转发和网络调试等场景。它支持多种协议和数据通道&#xff08;如文件、管…

永磁同步电机控制算法--基于PI和前馈的位置伺服控制

一、原理介绍 永磁同步伺服系统是包含了电流环、速度环和位置环的三环控制系统。 伺服系统通过电流检测电路和光电编码器检测电动机三相绕组电流和转子位置θ&#xff0c;通过坐标变换&#xff0c;计算出转矩电流分量iq和励磁电流分量id。 位置信号指令与实际转子位置信号的差…

Lucene多种数据类型使用说明

Lucene 作为一款高性能的全文检索引擎库&#xff0c;其核心功能围绕索引和搜索文本数据&#xff0c;但它也支持多种数据类型以满足复杂的应用场景。以下是 Lucene 支持的主要数据类型及其用途的详细说明&#xff1a; 1. 文本类型&#xff08;Text&#xff09; 用途&#xff1a;…

Web网页布局

目录 一、传统的DIVCSS布局&#xff08;使用率最高的&#xff09; 1.div传统的一块块转 2.以猫眼电影为例‘ 3.div布局格式&#xff08;唯一的id属性&#xff0c;不唯一写class重复的&#xff09; 3.2总体布局样式 二、HTML5语义标签CSS3布局 1.把div改为绿色的语义标签…

大模型基础(五):transformers库(下):快速分词器、自动配置类、快速微调

transformers库&#xff08;下&#xff09; 1 快速分词器1.1 Fast 分词器的核心特点1.2 对比示例1.3 何时使用 Fast 分词器&#xff1f;1.4 注意事项 2 自动配置类 AutoConfig2.1 核心功能2.2 基本用法2.3 主要应用场景2.4 常用函数2.5 与具体配置类的区别2.6 注意事项 3 快速微…

在pycharm profession 2020.3上离线安装.whl类型的包(以PySimpleGUI为例)

今天写个小代码&#xff0c;用到了PySimpleGUI。 在pycharm profession 2020.3的项目中的Terminal里运行如下代码即可安装。 python3 -m pip install --force-reinstall --extra-index-url https://PySimpleGUI.net/install PySimpleGUI 安装方法如图&#xff1a; 安装后使用…

SpringBoot整合RabbitMQ(Java注解方式配置)

1.生产端 1. 创建生产者SpringBoot工程 2. 引入start&#xff0c;依赖坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 3. 编写yml配置&#xff0c;基本…

分析strtol(),strtoul()和strtod()三个函数的功能

字符串转换为数值部分和子字符串首地址的函数有strtol(),strtoul()和strtod()三个函数。 1、strtol()函数 long int strtol(const char *str, char **endptr, int base) //当base0时,若字符串不是以"0","0x"和"0X"开头,则将数字部分按照10进制…

Spring 的事务隔离

在Spring框架中&#xff0c;事务管理是一个非常重要的方面&#xff0c;它允许开发者以声明式的方式定义事务边界&#xff0c;并且通过配置不同的隔离级别来控制并发事务的行为。Spring支持多种事务管理方式&#xff0c;包括编程式事务管理和声明式事务管理&#xff08;如使用Tr…

单片机自动排列上料控制程序

/****L2233 CODE11549 2025 4 18 08:53*******/ /***轴承上料机控制 提升 摇摆 光电检测***/ /***2025 3 21 电机控制PCB板 PAST ***/ /*2.3 2.2 1.2 1.3 1.4 1.5 1.6 1.7 5.3 3.2 ***/ /*启动 解锁 光电 接近 前停 后停 电机前 电机后*/ #include &quo…

力扣119题解

记录 2025.5.5 题目&#xff1a; 思路&#xff1a; 代码: class Solution {public List<Integer> getRow(int rowIndex) {List<Integer> row new ArrayList<Integer>();row.add(1);for (int i 1; i < rowIndex; i) {row.add((int) ((long) row.get(i…

国产化海光C86架构服务器安装windows实录

最近几年与红蓝关系急转直下&#xff0c;尤其是科技领域尤为突出。随之而来的就是软硬件的国产化大潮。由于行业的原因根据要求必须使用国产化服务器、国产化操作系统、国产化数据库、国产化中间件。虽然闭关锁国断开红蓝联系可以在一定程度激发国产化发展&#xff0c;但是不得…

Oracle OCP证书有效期是三年?

这一段时间&#xff0c;网上经常传出消息Oracle OCM认证证书有效期为三年&#xff0c;其实这个假消息&#xff0c;通过博睿谷与Oracle官方人员确认&#xff0c;OCP认证证书有效期是永久的。 OCP证书本身永久有效&#xff0c;但老版本的OCP证书代表着更多的项目经验&#xff0c…

Python 闭包:函数式编程中的魔法变量容器

闭包与匿名函数的常见混淆 在编程社区中&#xff0c;闭包(closure)和匿名函数(anonymous function)经常被混为一谈&#xff0c;这种混淆有其历史根源&#xff1a; 历史发展因素&#xff1a;在早期编程实践中&#xff0c;在函数内部定义函数并不常见&#xff0c;直到匿名函数广…

迅睿CMS导入别站数据库

<?php if (isset($_GET[go])) {$host localhost;// 数据库服务器$username uname;// 数据库用户名$password pwd;// 数据库密码$database database;// 数据库名$cmscid $_GET[cmscid];$mtabcid $_GET[mtabcid];if ($_GET[go] step1) {//第一步&#xff1a;先获取CMS…

基于C++、JsonCpp、Muduo库实现的分布式RPC通信框架

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;项目 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 项目介绍JsonCpp库简单介绍Muduo库简单介绍C11异步操作——std::future1. 使用 std::async 关联异步任务2. std::packaged_task 配…