当前位置: 首页 > 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 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...