当前位置: 首页 > news >正文

使用auth_basic模块进行基础认证

在建立和维护Web服务器时,身份认证是一个至关重要的环节。Nginx作为一个高性能的Web服务器,支持许多认证方法,其中较为简单和常用的一种即是基础身份认证(Basic Authentication),这需要借助auth_basic模块实现。本文将详细介绍Nginx中auth_basic模块的用途、使用场景、注意事项,并提供完整的示例和注释。此外,还将简要说明OpenResty上的auth_basic模块。

auth_basic模块的用途

auth_basic模块用于对访问指定资源的客户端进行简单的用户认证。通过该模块,可以确保只有满足提供的用户名和密码的请求才能访问特定资源。它的认证机制相对较为简单和直观,适用于一些不涉密的数据或内部管理的环境。

使用场景

  1. 开发和测试环境:在开发和测试环境中,确保只有相关开发人员或测试人员可以访问。
  2. 管理和维护页面:如搭建运维管理页面、监控页面、后台管理页面等,需要限制只允许有权限的用户访问。
  3. 临时保护公开不合适的资源:在部分资源还未准备好完全公开之前,临时性地加一道简单认证。

注意事项

  1. 不适合传输敏感信息:由于基础认证的原理是通过HTTP头传递用户名和密码,这些信息是通过base64编码的,不加密,因此不适合传输敏感信息。
  2. HTTPS的结合:为了避免用户名和密码在传输过程中被窃取,必须结合HTTPS使用,否则认证信息可能被中间人攻击窃取。
  3. 效率影响:大规模、高并发的应用场景可能影响服务器效率,应寻求其他更安全和高效的认证机制。

示例与解释

配置一个基础身份认证非常简单,下面通过一个示例来逐步讲解如何实现:

配置基于文件的基础认证

  1. 创建一个用户密码文件

通过htpasswd工具生成用户密码文件。这个工具是Apache HTTP Server常用的工具,Nginx完全兼容其生成的密码文件。

sudo yum install httpd-tools  # 安装 htpasswd 工具
htpasswd -c /etc/nginx/.htpasswd user1  # 创建包含 user1 的用户密码文件
  1. 修改Nginx配置文件

在Nginx配置文件中,使用auth_basic来启用基础认证,并使用auth_basic_user_file指令来指定包含用户信息的文件。

server {listen 80;server_name example.com;location / {auth_basic "Restricted Area";  # 设定弹出的对话框中的标题auth_basic_user_file /etc/nginx/.htpasswd;  # 指定用户密码文件proxy_pass http://localhost:8080;  # 示例:代理到后端服务}
}

详解:

  • auth_basic “Restricted Area”;:该指令启用基础认证,"Restricted Area"是在客户端弹出的认证对话框中的标题。
  • auth_basic_user_file /etc/nginx/.htpasswd;:指定用户和密码文件的路径,这个文件是在上一步中通过htpasswd创建的。
  • proxy_pass http://localhost:8080;:表示将通过认证的请求代理到后端的服务。

完整示例和注释

server {listen 80;server_name example.com;# 设置网站根目录的访问控制location / {# 启用基础认证,客户端看到的对话框标题为 "Restricted Area"auth_basic "Restricted Area";# 基础认证的用户密码文件auth_basic_user_file /etc/nginx/.htpasswd;# 代理转发请求到本地8080端口的服务(如应用服务器)proxy_pass http://localhost:8080;}
}

OpenResty上的auth_basic模块

OpenResty是基于Nginx的一个更强大的Web平台,集成了许多额外的模块和库。实际上,OpenResty完全继承了Nginx的auth_basic模块,因此其使用方法和语法几乎没有变化。对于OpenResty来说,基础认证的配置与Nginx是相同的。

server {listen 80;server_name openresty-example.com;location / {auth_basic "Restricted Area";  # 弹出对话框的标题auth_basic_user_file /etc/nginx/.htpasswd;  # 用户密码文件路径proxy_pass http://localhost:8080;  # 代理到后端服务}
}

高级用法

虽然基础身份认证相对简单,但在实际应用中,可以结合一些高级技巧和模块来增强其功能和安全性。下面将介绍如何结合其他Nginx模块和设置来实现更强大的认证和访问控制。

限制访问次数与速率

结合Nginx的limit_req模块,可以限制特定IP地址对受保护资源的访问次数和速率,从而减轻可能的暴力破解行为。

http {# 定义一个限制速率的区域limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {listen 80;server_name example.com;location / {auth_basic "Restricted Area";auth_basic_user_file /etc/nginx/.htpasswd;# 使用定义的区域应用限速limit_req zone=one burst=5 nodelay;proxy_pass http://localhost:8080;}}
}

在上述例子中:

  • **limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; **定义了一个命名为one的限速区域,每秒允许一个请求,每个IP地址有10MB的内存空间来存储速率记录。
  • **limit_req zone=one burst=5 nodelay; **在location块中应用了此限速规则,允许短时间内的突发请求数为5,超出速率限制的请求将被立即拒绝。

自定义认证失败页面

默认情况下,认证失败会返回一个简单的401 Unauthorized错误页面。这可能不适合所有应用场景。可以通过Nginx的error_page指令自定义认证失败页面:

server {listen 80;server_name example.com;location / {auth_basic "Restricted Area";auth_basic_user_file /etc/nginx/.htpasswd;error_page 401 /custom_401.html;location = /custom_401.html {root /usr/share/nginx/html;  # 自定义错误页面的路径internal;  # 确保该页面不会被直接访问}proxy_pass http://localhost:8080;}
}

在上述例子中,通过error_page 401 /custom_401.html;指定了自定义的401错误页面,并在location /custom_401.html块中定义页面的路径和内容。

基于IP地址的访问控制

如果希望只有特定的IP地址范围可以进行身份认证,可以结合Nginx的allow和deny指令:

server {listen 80;server_name example.com;location / {# 允许特定IP地址段访问allow 192.168.1.0/24;deny all;auth_basic "Restricted Area";auth_basic_user_file /etc/nginx/.htpasswd;proxy_pass http://localhost:8080;}
}

在上述例子中:

  • **allow 192.168.1.0/24; **允许192.168.1.0到192.168.1.255范围内的IP地址访问。
  • **deny all; **拒绝其他所有IP地址。

OpenResty中的高级用法

OpenResty作为Nginx的扩展平台,支持LUA脚本,这意味着可以在基础认证之外实现更复杂的逻辑。如基于数据库的认证或结合第三方OAuth服务。

基于自定义LUA脚本的认证示例

http {lua_shared_dict tokens 10m;server {listen 80;server_name openresty-example.com;location / {access_by_lua_block {local auth = ngx.var.http_authorizationif not auth or auth == "" thenngx.headerWWW-Authenticate = 'Basic realm="Restricted Area"'ngx.exit(ngx.HTTP_UNAUTHORIZED)endlocal user_pass = ngx.decode_base64(auth:sub(7))local username, password = user_pass:match("^(.-):(.*)$")if not (username == "user1" and password == "password1") thenngx.exit(ngx.HTTP_UNAUTHORIZED)end}proxy_pass http://localhost:8080;}}
}

上述配置中,通过LUA脚本自定义了认证逻辑,直接在代码中定义了用户名和密码验证。

参考文献

  1. Nginx Documentation: HTTP Basic Auth
  2. OpenResty Documentation
  3. Apache HTTP Server Documentation
  4. Nginx Documentation: Limit Request
  5. Nginx Documentation: Error Page

在Nginx中使用auth_basic模块进行基础身份认证是一种简单有效的方法,适合用于开发、测试环境以及内部管理系统。通过阅读本文,您应该了解了该模块的用途、适用场景、注意事项以及如何配置和使用基础身份认证

希望本文对您的Web服务安全管理有所帮助。

相关文章:

使用auth_basic模块进行基础认证

在建立和维护Web服务器时,身份认证是一个至关重要的环节。Nginx作为一个高性能的Web服务器,支持许多认证方法,其中较为简单和常用的一种即是基础身份认证(Basic Authentication),这需要借助auth_basic模块实…...

深度解析物联网平台:优化数据点位管理的实战策略

策略管理 策略,作为在物联网平台数据点位创建过程中可设定的规则,涵盖了多个重要方面,策略是在创建点位的时候,可以设置的规则,包括存储策略、告警策略、通知策略以及联动策略。这些策略都是通过专门的列表页面进行集…...

Spring常见问题

如何理解spring属于低侵入式设计? 在代码中不需要写明具体依赖对象,在运行时进行自动注入,降低了组件的耦合依赖的是接口,而接口的实现类具有拓展性 Spring IOC 实现了什么功能,谈谈你对IOC的理解。 负责创建对象&…...

MiniMax Golang2轮面试,期望薪资25K

一面 1、自我介绍 2、简单介绍一下你们成立了这个finance的财务中台之后,整体的服务架构是怎么样的吗? 3、就你提到的预算池项目,展开说说背景,以及解决了怎么样的问题? 4、为什么采用针对T-1订单的异步计算方案&a…...

MyBatis系统学习篇 - MyBatis的缓存

MyBatis的缓存实现原理主要基于三级缓存机制,包括一级缓存(本地缓存)、二级缓存(全局缓存)和三级缓存(跨会话缓存)。这个缓存在我们实际开发中可以避免我们查询重复的数据,在一定程度…...

K-means聚类模型

目录 1.定义 2.K-means聚类模型的优点 3.K-means聚类模型的缺点 4.K-means聚类模型的应用场景 5.对K-means聚类模型未来的展望 6.小结 1.定义 什么是 K-means 聚类模型?K-means 聚类模型是一种无监督学习算法,用于将数据划分为不同的组或簇&#…...

免费分享一套微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端) Java毕业设计…...

Matlab 2023b学习笔记1——界面认识

下载安装好Matlab后,可以看到如下界面: 可以看到,这时只有命令行窗口。我们在上方工具栏中选择“布局”—— “默认”,即可看到左右两边多出来了“当前文件夹”与“工作区”两栏。 一、当前文件夹界面 这个界面显示的是当前目录下…...

C++ sort排序的总和应用题

第1题 sort排序1 时限&#xff1a;1s 空间&#xff1a;256m 输入n个数&#xff0c;将这n个数从小到大排序&#xff0c;输出。 输入格式 第1行&#xff0c;一个正整数n&#xff08;n<100&#xff09; 第2行&#xff0c;n个正整数&#xff0c;小于100 输出格式 n个整…...

[力扣]——231.2的幂

题目描述&#xff1a; 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 bool isPowerOfTwo(int n){ if(n0)retur…...

【css】引入背景图时候,路径写入@会报错

看报错信息 我的写法 解决办法 在前面加个~...

【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效

此文介绍在百度飞桨上一个公开的案例&#xff0c;亲测有效。 厌倦了前篇一律的TTS音色了吗&#xff1f;打开短视频听来听去就是那几个声音&#xff0c;快来试试使用你自己的声音来做语音合成吧&#xff01;本教程非常简单&#xff0c;只需要你能够上传自己的音频数据就可以(建议…...

《ESP8266通信指南》番外-(附完整代码)ESP8266获取DHT11接入(基于Lua)

前言 此篇为番外篇,是 ESP8266 入门的其他功能教程,包括但不限于 DHT11 驱动TCP 通信Thingsboard 平台的接入阿里云物联网云平台接入华为云平台接入 1. 小节目标 使用 Lua 驱动 DHT11 传感器,获取温湿度的值 2. 进入主题 NodeMCU 基于 LUA 相关资料 官方文档&#xff1a;…...

[IMX6ULL驱动开发]-Linux对中断的处理(一)

目录 中断概念的引入 ARM架构中断的流程 异常向量表 Linux系统对中断的处理 ARM对程序和中断的处理 Linux进程中断处理 中断概念的引入 如何理解中断&#xff0c;我们可以进行如下抽象。把CPU看做一个母亲&#xff0c;当它正在执行任务的时候&#xff0c;可以看为是一个母…...

PHP基础学习笔记(面向对象OOP)

类和对象 <?php //声明一个名为 Fruit 的类&#xff0c;它包含两个属性&#xff08;$name 和 $color&#xff09;以及两个用于设置和获取 $name 属性的方法 set_name() 和 get_name()&#xff1a; class Fruit {// Propertiespublic $name;public $color;// Methodsfuncti…...

Mysql超详细安装配置教程(保姆级图文)

MySQL是一种流行的开源关系型数据库管理系统&#xff0c;它广泛用于网站和服务的数据存储和管理。MySQL以其高性能、可靠性和易用性而闻名&#xff0c;是许多Web应用程序的首选数据库解决方案之一。 一、下载安装包 &#xff08;1&#xff09;从网盘下载安装文件 点击此处直…...

HR招聘测评,如何判断候选人的团队协作能力?

什么是团队协作能力&#xff1f; 团队协作能力&#xff0c;说的是在集体环境中&#xff0c;能同他人协同工作&#xff0c;为追求共同的目标而努力&#xff0c;其中包括沟通&#xff0c;表达&#xff0c;协调&#xff0c;尊重&#xff0c;信任&#xff0c;责任共担等一系列综合…...

[STM32-HAL库]Flash库-HAL库-复杂数据读写-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C6T6

目录 一、前言 二、实现步骤 1.STM32CUBEMX配置 2.导入Flash库 3.分析地址范围 4.找到可用的地址 5.写入读取普通数据 6.写入读取字符串 6.1 存储相关信息 6.2 存取多个参数 三、总结及源码 一、前言 在面对需要持久化存储的数据时&#xff0c;除了挂载TF卡&#xff0c;我们…...

windows 下访问 csdn 异常问题

windows下访问csdn可能会出现什么 确认是真人 或着直接连接不上的情况, 需要在 C:\Windows\System32\drivers\etc 路径下 hosts文件中添加如下内容 1.180.18.85 blog.csdn.net 如果目录下没有hosts文件就自己建一个...

vue3结合element-plus之如何优雅的使用表格

背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...