使用auth_basic模块进行基础认证
在建立和维护Web服务器时,身份认证是一个至关重要的环节。Nginx作为一个高性能的Web服务器,支持许多认证方法,其中较为简单和常用的一种即是基础身份认证(Basic Authentication),这需要借助auth_basic模块实现。本文将详细介绍Nginx中auth_basic模块的用途、使用场景、注意事项,并提供完整的示例和注释。此外,还将简要说明OpenResty上的auth_basic模块。
auth_basic模块的用途
auth_basic模块用于对访问指定资源的客户端进行简单的用户认证。通过该模块,可以确保只有满足提供的用户名和密码的请求才能访问特定资源。它的认证机制相对较为简单和直观,适用于一些不涉密的数据或内部管理的环境。
使用场景
- 开发和测试环境:在开发和测试环境中,确保只有相关开发人员或测试人员可以访问。
- 管理和维护页面:如搭建运维管理页面、监控页面、后台管理页面等,需要限制只允许有权限的用户访问。
- 临时保护公开不合适的资源:在部分资源还未准备好完全公开之前,临时性地加一道简单认证。
注意事项
- 不适合传输敏感信息:由于基础认证的原理是通过HTTP头传递用户名和密码,这些信息是通过base64编码的,不加密,因此不适合传输敏感信息。
- HTTPS的结合:为了避免用户名和密码在传输过程中被窃取,必须结合HTTPS使用,否则认证信息可能被中间人攻击窃取。
- 效率影响:大规模、高并发的应用场景可能影响服务器效率,应寻求其他更安全和高效的认证机制。
示例与解释
配置一个基础身份认证非常简单,下面通过一个示例来逐步讲解如何实现:
配置基于文件的基础认证
- 创建一个用户密码文件
通过htpasswd工具生成用户密码文件。这个工具是Apache HTTP Server常用的工具,Nginx完全兼容其生成的密码文件。
sudo yum install httpd-tools # 安装 htpasswd 工具
htpasswd -c /etc/nginx/.htpasswd user1 # 创建包含 user1 的用户密码文件
- 修改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脚本自定义了认证逻辑,直接在代码中定义了用户名和密码验证。
参考文献
- Nginx Documentation: HTTP Basic Auth
- OpenResty Documentation
- Apache HTTP Server Documentation
- Nginx Documentation: Limit Request
- 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 时限:1s 空间:256m 输入n个数,将这n个数从小到大排序,输出。 输入格式 第1行,一个正整数n(n<100) 第2行,n个正整数,小于100 输出格式 n个整…...

[力扣]——231.2的幂
题目描述: 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 bool isPowerOfTwo(int n){ if(n0)retur…...

【css】引入背景图时候,路径写入@会报错
看报错信息 我的写法 解决办法 在前面加个~...

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

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

[IMX6ULL驱动开发]-Linux对中断的处理(一)
目录 中断概念的引入 ARM架构中断的流程 异常向量表 Linux系统对中断的处理 ARM对程序和中断的处理 Linux进程中断处理 中断概念的引入 如何理解中断,我们可以进行如下抽象。把CPU看做一个母亲,当它正在执行任务的时候,可以看为是一个母…...
PHP基础学习笔记(面向对象OOP)
类和对象 <?php //声明一个名为 Fruit 的类,它包含两个属性($name 和 $color)以及两个用于设置和获取 $name 属性的方法 set_name() 和 get_name(): class Fruit {// Propertiespublic $name;public $color;// Methodsfuncti…...

Mysql超详细安装配置教程(保姆级图文)
MySQL是一种流行的开源关系型数据库管理系统,它广泛用于网站和服务的数据存储和管理。MySQL以其高性能、可靠性和易用性而闻名,是许多Web应用程序的首选数据库解决方案之一。 一、下载安装包 (1)从网盘下载安装文件 点击此处直…...

HR招聘测评,如何判断候选人的团队协作能力?
什么是团队协作能力? 团队协作能力,说的是在集体环境中,能同他人协同工作,为追求共同的目标而努力,其中包括沟通,表达,协调,尊重,信任,责任共担等一系列综合…...

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

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

vue3结合element-plus之如何优雅的使用表格
背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...