使用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 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
